如何使用 Selenium 和 Java 从非选择下拉列表中单击并选择一个选项
Posted
技术标签:
【中文标题】如何使用 Selenium 和 Java 从非选择下拉列表中单击并选择一个选项【英文标题】:How to click and select an option from a non select dropdown using Selenium and Java 【发布时间】:2021-04-19 15:22:51 【问题描述】:我正在使用 Selenium 开始自动化,这是我第一次单独做,我在这里找不到下拉列表的正确代码https://demoqa.com/automation-practice-form 最后有一个“州和城市列表”。对于州,您必须单击“选择州”,然后它会为您提供选项,因此您必须单击所需的选项。
这是我的代码,我尝试了不同的选项,但这是最接近正确运行代码的选项(但它仍然没有做需要做的事情) 我知道它不能用 Select 来完成,因为它是一个 div,我只能使用:
driver.findElement()
代码试验:
//Select state and city
driver.findElement(By.id("state")).click();
driver.findElement(By.xpath("//body/div/div/div/div/div/div/form/div[10]/div[2]/div[1]/div[1]/div[1]/div[1]")).click();
图片A: enter image description here
图片 B:
图片 C: enter image description here
【问题讨论】:
是否有明确的错误或只是无法正常工作? 您可能需要在查找下拉元素之前添加等待,因为它会动态添加到 dom 中 您好!不,它没有给我一个明确的错误,它可以工作,但它没有保持选中状态。是的,我会在等待的情况下尝试这样做。谢谢! 【参考方案1】:driver.get("https://demoqa.com/automation-practice-form");
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.id("react-select-3-input")))).sendKeys("NCR");
【讨论】:
欢迎来到 Stack Overflow。请阅读How to Answer。带有解释的代码总是更有帮助。【参考方案2】:感谢那些花时间帮助我的人.. 我找到了解决方案!也许还有另一种方式,但这是我找到的方式,因为这是我第一次编写代码,我真的很高兴。 我所做的是一步一步地走,直到我找到“输入”,所以我使用 sendKeys.(keys.Enter);因为它不适用于 .click();
后来我意识到只有 .................... ..................... state.sendKeys("NCR") ... state.sendKeys(Keys.ENTER);
也可以工作...所以..代码很简单..
公共无效选择状态和城市() WebDriverWait 等待 = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.xpath("//div[contains(text(),'Select State')]"))));
wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.cssSelector("#state > div"))));
driver.findElement(By.xpath("//div[@id='state']//div[@class='css-1g6gooi']"));
driver.findElement(By.xpath("//body/div[@id='app']/div/div/div/div/div/form[@id='userForm']/div[@id='stateCity-wrapper']/div/div[@id='state']/div/div/div/div[1]"));
state.sendKeys("NCR");
state.sendKeys(Keys.ENTER);
driver.findElement(By.xpath("//div[contains(text(),'Select City')]"));
driver.findElement(By.xpath("//body//div[@id='app']//div[@id='city']//div//div//div[2]"));
driver.findElement(By.xpath("//body/div[@id='app']/div/div/div/div/div/form[@id='userForm']/div[@id='stateCity-wrapper']/div/div[@id='city']/div/div/div/div[1]"));
city.sendKeys("Delhi");
city.sendKeys(Keys.ENTER);
【讨论】:
【参考方案3】:drop-down-menu 不是html-select 元素。要从 State 下拉列表中选择一个项目,您需要为elementToBeClickable()
诱导WebDriverWait,您可以使用以下Locator Strategies:
driver.get("https://demoqa.com/automation-practice-form");
((javascriptExecutor)driver).executeScript("return arguments[0].scrollIntoView(true);", new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div#state div[class$='placeholder']"))));
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div#state div[class$='placeholder']"))).click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//*[contains(., 'Uttar Pradesh')]"))).click();
参考
您可以在以下位置找到一些相关的详细讨论:
Automating jQuery based bootstrap dropdown using Selenium and Java I would like to select a DropDown from a list but HTML don't have select Tag I am not sure should i use Select class or what【讨论】:
您好!它没有按照它应该做的方式工作,因为它没有给出任何错误,但同时它没有做它应该做的事情..选择没有保持选中.. @NatachaVergara 很高兴能为您提供帮助。 Vote up questions and answers 您发现这对未来读者的利益很有帮助。见Why is voting important。以上是关于如何使用 Selenium 和 Java 从非选择下拉列表中单击并选择一个选项的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Selenium WebDriver 和 java 从下拉列表中选择一个项目?
如何使用Java在Selenium WebDriver中按类名选择下拉值[重复]