在Xpath中使用OR条件来标识相同的元素

时间:2015-12-30 05:46:24

标签: selenium xpath selenium-webdriver

我有这个逻辑,当前页面的标题首先点击下一个按钮,再次获取标题,如果两个标题相同,意味着导航没有移动到下一页,它再次点击Next。

但是,我的问题是title元素的Xpath不同 - 相同的title元素有两个Xpath。一个是其他页面中的另一个页面。

就是这个,

(.//span[@class='g-title'])[2]

OR

.//span[@class='g-title']

那么,我该如何处理呢?

5 个答案:

答案 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']

有关详情:Two conditions using OR in XPATH

答案 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。希望这有点有用。我花了一些偏头痛来缩小范围。