Ich versuche einen Knopf zu finden, normalerweise meinen normalen Stil, der immer bis jetzt funktioniert. Ich vermute, es ist der Abstand. Ich habe versucht, mit "Assignees" zu lokalisieren. Ich benutze Selen-Webdriver, aber die Frage ist ziemlich viel auf XPath. Mein Wrapper ist als solche:xpath locate taste text
class WebdriverChauffuerMixin(object):
def locate_element(self, search_text=None, xpath=None):
if not xpath:
xpaths = [ "//input[@value='{text}']", "//button[normalize-space(text())='{text}']",
"//a[child::span[normalize-space(text())='{text}']]", "//a[normalize-space(text())='{text}']"]
else:
return self.find_element_by_xpath(xpath)
try:
return self.find_element_by_id(search_text)
except:
try:
return self.find_element_by_name(search_text)
except:
try:
return self.find_element_by_class_name(search_text)
except:
for path in xpaths:
try:
return self.find_element_by_xpath(path.format(text=search_text))
except:
pass
return None
...
class FirefoxDriver(WebdriverChauffuerMixin, webdriver.Firefox):
pass
Die html ist wie:
<div class="discussion-sidebar-item sidebar-assignee js-discussion-sidebar-item">
<div class="js-issue-sidebar-form" data-url="/myproject/project/issues/new/show_partial?partial=issues%2Fsidebar%2Fnew%2Fassignees">
<div class="select-menu js-menu-container js-select-menu "
data-multiple data-max-options=10>
<button type="button"
class="discussion-sidebar-heading discussion-sidebar-toggle js-menu-target"
aria-label="Assign up to 10 people to this issue" aria-haspopup="true"
data-hotkey="a">
<svg aria-hidden="true" class="octicon octicon-gear" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path d="M14 8.77v-1.6l-1.94-.64-.45-1.09.88-1.84-1.13-1.13-1.81.91-1.09-.45-.69-1.92h-1.6l-.63 1.94-1.11.45-1.84-.88-1.13 1.13.91 1.81-.45 1.09L0 7.23v1.59l1.94.64.45 1.09-.88 1.84 1.13 1.13 1.81-.91 1.09.45.69 1.92h1.59l.63-1.94 1.11-.45 1.84.88 1.13-1.13-.92-1.81.47-1.09L14 8.75v.02zM7 11c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"></path></svg>
Assignees
</button>
<div class="select-menu-modal-holder js-menu-content js-navigation-container" aria-hidden="true">
<div class="select-menu-modal">
<div class="select-menu-header">
<svg aria-label="Close" class="octicon octicon-x js-menu-close" height="16" role="img" version="1.1" viewBox="0 0 12 16" width="12"><path d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"></path></svg>
<span class="select-menu-title">Assign up to 10 people to this issue</span>
</div>
<div class="select-menu-filters">
<div class="select-menu-text-filter">
<input type="text" id="assignee-filter-field" class="js-filterable-field js-navigation-enable"
placeholder="Filter people" aria-label="Type or choose a name" autocomplete="off">
</div>
</div>
<div class="js-max-warning warning d-none">
You can only select 10 assignees.
</div>
XPath von "//button[normalize-space(text())='{text}']"
immer vor an dieser Stelle gearbeitet. Wie nehme ich das button
Element, das Assignees
sagt? Ty
ja diese zu lokalisieren hat funktioniert. Ich hatte Glück auf einer anderen Suche. Beide Antworten sind großartig, das funktioniert für jeden Text, wenn Sie spezifisch genug sind, gewinnen Sie – codyc4321