我有这个逻辑,当前页面的标题首先点击下一个按钮,再次获取标题,如果两个标题相同,意味着导航没有移动到下一页,它再次点击Next。
但是,我的问题是title元素的Xpath不同 - 相同的title元素有两个Xpath。一个是其他页面中的另一个页面。
就是这个,
(.//span[@class='g-title'])[2]
OR
.//span[@class='g-title']
那么,我该如何处理呢?
答案 0 :(得分:9)
如果元素有两个xpath,那么你可以编写两个xpath,如下面的
xpath1 | xpath2
例如://input[@name="username"] | //input[@id="wm_login-username"]
它将选择任何一个xpath
答案 1 :(得分:1)
您可以使用or
运算符
(.//span[@class='g-title'])[2] or .//span[@class='g-title']
答案 2 :(得分:0)
在这里使用条件。做类似下面的事情
String title1= YOUR Expected Title
String currenttitle= driver.getTitle();
if(currenttitle.equalsIgnoreCase(title1))
{
}else{
}
OR
Boolean isPresent = driver.findElements(By.yourLocator).size() > 0
if(isPresent==true)
{
}
else{
}
欲了解更多信息,请参阅: - Selenium WebDriver - Test if element is present
答案 3 :(得分:0)
您可以使用或,如下所示。
// TR [@class =' alternateRow'或@class =' itemRow']
答案 4 :(得分:0)
我对使用这种方法有一个有趣的见解。在我的 python 代码中,我点击了一个购物车按钮和“|”仅适用于像这样的单独的 xpath 语句......
WebDriverWait(webdriver,20).until(EC.visibility_of_element_located((By.XPATH,"//*[@class='buttoncount-1'] | //button[contains(text(), 'Add to Cart')]")))
或
btn = webdriver.find_element_by_xpath("//*[@class='buttoncount-1'] | //button[contains(text(), 'Add to Cart')]")
我发现“或”只有在它们共享相同的括号时才有效[]
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[contains(text(), 'Add to Cart') or contains(text(),'Buy')]"))).click()
既然你来了。如果您对“和”语句感到好奇,这对我有用...
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[contains(text(), 'Continue To Order Rev')][@data-attr='continueToOrderReviewBtn']"))).click()
只需将两个单独的语句配对就足够了。不需要“和”。 注意:这一切都在python中。我不知道这将如何转移到java。希望这有点有用。我花了一些偏头痛来缩小范围。