HTML:
<div class="component-multi-row-slide-title"> Cloth </div>
xpath
/html/body/div/main/div/div/div[2]/div/div/div/div[1]/div/div***[4]***/div/div[2] the div[4]
保持变化。如果有新项目进入网络,开发人员将更改div编号。
我想单击“服装”。添加新类别后,xpath会不断变化。
答案 0 :(得分:1)
首先使用绝对xpath具有某些缺点,因为添加新元素时,先前标识的元素的 xpath 会不断变化。因此,解决方案是使用相对Xpath 。
根据您提供的HTML,要单击文本为布料的元素,可以使用以下Locator Strategy:
XPath 答:
//div[@class='component-multi-row-slide-title' and contains(., 'Cloth')]
XPath B:
//div[@class='component-multi-row-slide-title' and normalize-space()='Cloth']
答案 1 :(得分:0)
绝对Xpath:它包含从根元素到期望元素的完整路径。
相对Xpath:这更像是从引用所需元素开始并从特定位置开始。
您始终使用相对路径来测试元素。其背后的原因是,如果您在网站上进行任何体系结构更改,则更改不会影响元素的测试或选择。
因此,使用如下相对xpath
WebElement cloth = driver.findElement(By.xpath("//div[normalize-space()='Cloth']"));
cloth.click();
让我知道这是否无济于事
答案 2 :(得分:0)
我建议使用自定义的xpath。如下所示:
driver.findElement(By.xpath("//div[contains(text(), 'Cloth')]").click
driver.findElement(By.xpath("//div[contains(text(), 'Fashion Acessories')]").click
肯定会起作用。随时让我知道有关xpath的问题。
谢谢
答案 3 :(得分:0)
在这种情况下,您需要使用相对xpath。
您可以使用以下选项中的任何xpath。前两个将按文本查找元素,第三个将按类查找选项。
1>>driver.findElement(By.xpath("//div[contains(text(),'Cloth')]")).click();
2>>driver.findElement(By.xpath("//*[contains(text(),'Cloth')]")).click();
3>>driver.findElement(By.xpath("//div[@class='component-multi-row-slide-title']")).click();
让我知道其他元素是否也存在相同的类名。
答案 4 :(得分:0)
仅供参考:XPath用于使用HTML DOM结构查找网页上任何元素的位置。
绝对XPath的缺点是,如果在元素的路径中进行了任何更改,则XPath将会失败。
因此,在这种情况下,可以使用相对Xpaths :
// div [contains(text(),'Cloth')]或// * [contains(text(),'Cloth')]
// div [contains(text(),'Fashion Acessories')]或// * [contains(text(),'Fashion 附件')]
使用方法: driver.findElement(By.xpath(“ // div [contains(text(),'Cloth')]”)));
答案 5 :(得分:-1)
您编写以下代码
driver.findElement(By.xpath("//div[normalize-space()='Cloth']").click
上面的代码将直接识别元素,并且当开发人员更改页面元素时,它本质上不会变脆。