我是selenium自动化的新手,我正在试图弄清楚如何处理为不同浏览器显示不同xpath的元素的代码。
//xpath for IE
private readonly By ByPermIE = By.XPath("//*[@id='group-permissions']/div[1]/div[2]/span[2]");
//xpath for chrome
private readonly By ByPermChrome = By.XPath("//*[@id='group-permissions']/div[1]/div[1]/span[2]");
如果我在不同浏览器上对此元素执行某些操作,我如何在测试用例中使用这些元素。我计划将其扩展到另外三个浏览器。那么,我应该在其他地方使用if else条件吗?对于此类案件,是否还有其他最佳做法?
答案 0 :(得分:1)
您可以在xpath下面使用xpath。
private readonly By ByPermChrome = By.XPath("//*[@id='group-permissions']/div[1]//span[text() = 'text that span contains']");
答案 1 :(得分:0)
您可以将xpath写为尽可能相对。不建议写绝对xpath。
对于您的上述情况,请使用xpath以下的浏览器。
By.XPath("//*[@id='group-permissions']//span[2]");
或
By.XPath("//*[@id='group-permissions']//span[text()='someThing']");
有关xpath的更多信息,请参阅this。
答案 2 :(得分:0)
如果你发布你的HTML代码,那将很容易。但由于没有给出html,我可以建议你如下:
//u can use if condition here
if(driver.findElements(By.XPath("//*[@id='group-permissions']/div[1]/div[2]/span[2]")).size()==1){
//perform operation here
}
else
//perform operation here
这是另一种方法,因为没有HTML代码。
如果你给出html代码,我想我们可以建议你更多
答案 3 :(得分:0)
我可以给出的一个建议是你可以在xpaths中使用OR条件。说OR OR。 一旦遇到第一个正确的Xpath OR,它就会返回成功。