在该网站的移动版本上,我需要单击“注销”类别,但是xpath不起作用(xpath在列表中的第一个类别上单击),试图使用此示例
WebElement logout = driver.findElement(By.xpath("//li[contains(@class, 'link logout hidden-md-up icon-logout')]"));
logout.click();
但是它仍然无法正常工作。也许有人知道如何解决这个问题?
答案 0 :(得分:0)
两件事:
<ul>
,我猜单击它与单击其下的第一个<li>
相同。您也可以尝试引用文本。
WebElement logout = driver.findElement(By.xpath("//li[contains(@class,'logout') and text()[contains(.,'Logout')]]"
答案 1 :(得分:0)
要单击文本为登出的元素,您需要诱使 WebDriverWait 使元素可点击,并且可以使用以下命令解决方案:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//ul[@class='account-action-list']//li[@class='link logout hidden-md-up icon-logout']/span"))).click();
答案 2 :(得分:0)
尝试使用:
Eg: Main url: www.inhouseknowlegeTree.net.
Subsequent portal urls =
a. www.inhouseknowlegeTree.net/supervisor or www.supervisor.inhouseknowlegeTree.net
b. www.inhouseknowlegeTree.net/worker or www.worker.inhouseknowlegeTree.net
c. www.inhouseknowlegeTree.net/manager or www.manager.inhouseknowlegeTree.net
答案 3 :(得分:0)
尝试一下:
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[contains(., 'Logout')"))).click();
答案 4 :(得分:0)
尝试使用链接文本方法或部分链接文本方法。
driver.findElement(By.linkText("Logout")).click();
或
driver.findElement(By.partialLinkText("Logout")).click();
确保参数文本与DOM中的文本匹配
答案 5 :(得分:-1)
定位器有两个问题:
ul[contains(@class, '...')]
,但是这些分类都在li
元素上。因此找不到您的元素。class
属性是用空格分隔的类的列表,并且不能保证列表中的顺序。您可以使用WebDriver的By.className()
定位这些类中的任何一个;例如driver.findElement(By.className("logout"))
。即使这些可能仍不能解决您的问题。您可能需要定位span
下的li
节点。
更新:
像By.xpath("//li[contains(@class, 'link')
这样的选择器几乎肯定不会起作用,因为页面中可能有多个类为link
的元素。在这种情况下,Selenium会选择第一个,很可能不是您想要的那个。
为了帮助我们获得特定的选择器,您必须提供更多的HTML。