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

硒流-非接触元素异常

吴高洁
2023-03-14

有人能帮我破解这个代码吗?当我使用流时,我得到了NoSuchElement异常。Foreach()替代方案(注释)工作正常。我想知道为什么它抛出异常,如果与流实现。下面是代码供大家参考:

public class Test {
public static void main(String[] args)
{
System.setProperty("webdriver.chrome.driver", "E:\\Sajidh\\WebDriver\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://rahulshettyacademy.com/seleniumPractise/#/");
WebElement product = driver.findElements(By.cssSelector("div.product")).stream().filter(p->p.findElement(By.cssSelector("h4.product-name")).getText().contains("Potato")).collect(Collectors.toList()).get(0);
// WebElement product = null;
// for(WebElement p : driver.findElements(By.cssSelector("div.product")))
// {
// if(p.findElement(By.cssSelector("h4.product-name")).getText().contains("Potato"))
// {
// product = p;
// break;
// }
// }
System.out.println(product.findElement(By.cssSelector("h4.product-name")).getText());
System.out.println(product.findElement(By.cssSelector("input.quantity")).getText());
System.out.println(product.findElements(By.cssSelector("div.product-action button:nth-child(1)")).size());
product.findElement(By.cssSelector("div.product-action button:nth-child(1)")).click();
}
}

共有1个答案

杭柏
2023-03-14

要打印所有元素text Content,您需要诱导WebDriver等待visibilityOfAllElementsLocatedBy(),您可以使用Java8stream()map(),并且可以使用以下任何一个Locator策略:

>

  • css选择器

    import java.util.stream.Collectors;
    
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    System.setProperty("webdriver.chrome.driver", "C:\\WebDrivers\\chromedriver.exe");
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--start-maximized");
    WebDriver driver = new ChromeDriver(options);
    driver.get("https://rahulshettyacademy.com/seleniumPractise/#/");
    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div.product h4.product-name"))).stream().map(element->element.getText()).collect(Collectors.toList()));
    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@class='product']//h4[@class='product-name']"))).stream().map(element->element.getText()).collect(Collectors.toList()));
    driver.quit();
    

    控制台输出:

    [Brocolli - 1 Kg, Cauliflower - 1 Kg, Cucumber - 1 Kg, Beetroot - 1 Kg, Carrot - 1 Kg, Tomato - 1 Kg, Beans - 1 Kg, Brinjal - 1 Kg, Capsicum, Mushroom - 1 Kg, Potato - 1 Kg, Pumpkin - 1 Kg, Corn - 1 Kg, Onion - 1 Kg, Apple - 1 Kg, Banana - 1 Kg, Grapes - 1 Kg, Mango - 1 Kg, Musk Melon - 1 Kg, Orange - 1 Kg, Pears - 1 Kg, Pomegranate - 1 Kg, Raspberry - 1/4 Kg, Strawberry - 1/4 Kg, Water Melon - 1 Kg, Almonds - 1/4 Kg, Pista - 1/4 Kg, Nuts Mixture - 1 Kg, Cashews - 1 Kg, Walnuts - 1/4 Kg]
    

    xpath

    import java.util.stream.Collectors;
    
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    System.setProperty("webdriver.chrome.driver", "C:\\WebDrivers\\chromedriver.exe");
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--start-maximized");
    WebDriver driver = new ChromeDriver(options);
    driver.get("https://rahulshettyacademy.com/seleniumPractise/#/");
    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div.product h4.product-name"))).stream().map(element->element.getText()).collect(Collectors.toList()));
    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@class='product']//h4[@class='product-name']"))).stream().map(element->element.getText()).collect(Collectors.toList()));
    driver.quit();
    

    控制台输出:

    [Brocolli - 1 Kg, Cauliflower - 1 Kg, Cucumber - 1 Kg, Beetroot - 1 Kg, Carrot - 1 Kg, Tomato - 1 Kg, Beans - 1 Kg, Brinjal - 1 Kg, Capsicum, Mushroom - 1 Kg, Potato - 1 Kg, Pumpkin - 1 Kg, Corn - 1 Kg, Onion - 1 Kg, Apple - 1 Kg, Banana - 1 Kg, Grapes - 1 Kg, Mango - 1 Kg, Musk Melon - 1 Kg, Orange - 1 Kg, Pears - 1 Kg, Pomegranate - 1 Kg, Raspberry - 1/4 Kg, Strawberry - 1/4 Kg, Water Melon - 1 Kg, Almonds - 1/4 Kg, Pista - 1/4 Kg, Nuts Mixture - 1 Kg, Cashews - 1 Kg, Walnuts - 1/4 Kg]
    

  •  类似资料:
    • 问题内容: 我的任务是编写一个解析器以单击网站上的一个按钮,但我只能单击其中一个按钮而遇到问题。以下代码适用于除一个按钮之外的所有按钮。 这是html:http: //pastebin.com/6dLF5ru8 这是源html:http: //pastebin.com/XhsedGLb python代码: 我收到此错误。 根据赛富尔,我刚刚尝试等待相同的元素不可见异常: 问题答案: 如果你看一下页

    • 我试过这两个,一无所获。 应Kajal Kundu的要求转贴。

    • 我目前正在处理一个自动填写表格的项目。当表单填写时,下一个按钮会出现,这就是为什么它给我一个错误。 我试过: HTML: 错误: selenium.common.exceptions.ElementClickInterceptedException:消息:元素点击被拦截:元素在点(203,530)不可点击。其他元素将收到点击:...(会话信息:chrome=76.0.3809.132)

    • 我正在尝试将一个硒脚本从火狐转换为Chrome。该代码在x86_64上与火狐和壁虎驱动程序一起工作。壁虎驱动程序不支持ARM,所以我试图转移到Chrome。 Chrome和chromedriver在使用。例外是。 问题是什么,我如何解决它? 这是测试程序。 以下是尝试使用Chrome和chrome驱动程序枚举X路径时的异常。 此代码: 应该返回如下内容: 以下是版本号。

    • 我最近将selenium升级到最新版本(2.53),将firefox升级到最新版(45.0.1)。 我在相同的网站上运行相同的代码,但我突然有很多这样的例外: Web 驱动程序异常: 消息: 元素在点 (312, 8.816665649414062) 不可单击。其他元素将收到单击: 例如: 有什么我应该注意的新东西吗?我之前的python selenium版本相当旧,而且我在Firefox 38上

    • 我正在使用硒进行测试。我想点击一个元素。元素非常可点击和可见,但元素的中间点被遮挡,导致错误。 这是一个主视频: 超文本标记语言代码(链接到演示): Python selenium代码: 结果: 这似乎是硒的一个相当可悲的限制。按钮是可点击的,但不是在所有点。我不想摆弄滚动和坐标。 一般来说,关于异常有许多类似的问题,例如: 无法单击元素:元素单击碎片/硒中的异常 硒不能点击元素,因为其他元素掩盖