当前位置: 首页 > 知识库问答 >
问题:

有人能建议我为您创建动态xpath吗https://jpetstore.cfapps.io/catalog/categories/FISH

查宜民
2023-03-14
System.setProperty("webdriver.chrome.driver", "C:\\Users\\Testing\\Downloads\\chromedriver_win32\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get("https://jpetstore.cfapps.io/login");
    driver.manage().window().maximize();
    driver.findElement(By.name("username")).sendKeys("Testing");
    driver.findElement(By.name("password")).sendKeys("test@123");
    driver.findElement(By.id("login")).click();
    driver.findElement(By.xpath("//div[@id='SidebarContent']/a[contains(@href,'FISH')]/img")).click();

在这里,我能够创建动态xpath驱动程序。findElement(By.xpath(“//div[@id='Catalog']//parent::td//previous sibling::td//a//following::td//a”))。单击();驾驶员findElement(By.xpath(“//div[@id='Catalog']//parent::a//following::a[contains(text(),'Add to Cart')]”)。单击();驾驶员findElement(By.xpath(“//div[@id='BackLink']//a[contains(text(),'Return to Main Menu')]”)。单击();驾驶员findElement(By.xpath(“//div[@id='SidebarContent']//a[@href='/catalog/categories/FISH'])。单击();

共有1个答案

曾修真
2023-03-14

如果要单击该链接,则需要使用xpath直到a节点,请尝试以下xpath:

String xPath = "//div[@id='SidebarContent']/a[contains(@href,'FISH')]";

如果您仍然遇到异常,则需要在单击它之前给予一些延迟:

 Thread.sleep(3000);
 driver.findElement(By.xpath("//div[@id='SidebarContent']/a[contains(@href,'FISH')]")).click();

可以使用FluentWait来避免某些异常,如果要使用FluentWait,请尝试以下代码:

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver).withTimeout(60, TimeUnit.SECONDS).pollingEvery(1, TimeUnit.SECONDS).ignoring(NoSuchElementException.class, StaleElementReferenceException.class);
WebElement fish = wait.until(new Function<WebDriver, WebElement>() {
    public WebElement apply(WebDriver driver) {
    return driver.findElement(By.xpath("//div[@id='SidebarContent']/a[contains(@href,'FISH')]"));
    }
});
fish.click();

更新:

根据评论中的讨论,以下是解决方案:

driver.get("https://jpetstore.cfapps.io/login");
driver.manage().window().maximize();
driver.findElement(By.name("username")).sendKeys("some username");
driver.findElement(By.name("password")).sendKeys("some password");
driver.findElement(By.id("login")).click();
driver.findElement(By.xpath("//div[@id='SidebarContent']/a[contains(@href,'FISH')]")).click();
// Replace Name('Angelfish') with any fish you want
driver.findElement(By.xpath("//td[text()='Angelfish']/preceding-sibling::td/a")).click();

// Replace Description('Small') with any size you want
driver.findElement(By.xpath("(//span[text()='Small']/parent::td/following::td//a[@class='Button'])[1]")).click();

我希望它能帮助...

 类似资料:
  • 有没有插件/附加组件可以帮助创建框架?从何处开始创建框架以及如何继续? 你的意见很有价值。 谢谢,阿美

  • 然后: 一周中的几天,后跟“,” 我不能重复一周中的某一天 字符串的最后一天不能有“,”

  • 在本章中,我们将研究如何在Drupal中Create Categories 。 分类可以被视为类别或标签。 Drupal分类法由词汇表和术语构成。 词汇表是一组术语,术语只是类别的另一个词。 以下是在Drupal中创建类别的简单步骤。 Step 1 - 转到Structure ,然后单击类别中的分类,如以下屏幕所示。 Step 2 - 单击Add vocabulary链接。 Step 3 - 输入

  • 问题内容: 有没有办法动态创建所有实例属性?例如,我想能够产生在构造函数中的所有属性,仍然能够访问它们的类实例化这样的后:。注意,我想单独访问属性,而不是使用数组。这是我 不 想要的例子: 更具体地说,当我处理具有大量属性的类时,我希望能够选择数据库中的所有列(代表属性)并从中创建实例属性。每个列值应存储在单独的实例属性中。 问题答案: 有点。有一些魔术方法可以让您连接自己的代码以在运行时实现类行

  • 下面是SVG的html,请帮助我为SVG创建XPATH