如何在硒中处理此网站 "https://www.goibibo.com/" "from" 和 "destination" 框中的自动建议
how handle auto suggest in "from" and "destination" box for this website "https://www.goibibo.com/" in selenium
如何在 selenium 中处理此网站“https://www.goibibo.com/”的“发件人”和“目的地”框中的自动建议。
请帮忙
我厌倦了使用基本方法但无法获取自动建议下拉的 X 路径
无法点击下拉菜单
package basic;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class goibibo {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
WebDriver driver = new ChromeDriver();
driver.get("https://www.goibibo.com/");
new WebDriverWait(driver, 20)
.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='gosuggest_inputSrc']")))
.sendKeys("Mum");
List<WebElement> myList = new WebDriverWait(driver, 20).until(
ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//*[@id=\"react-autosuggest-1\"]")));
for (WebElement element : myList) {
if (element.getText().contains("Mumbai"))
;
element.click();
}
}
}
所以您可以尝试一种解决方案,请找到下面的屏幕截图,
如您在屏幕截图中所见,如果我在文本框中键入 M,则下拉列表会显示与字母 'M' 相关的记录,如果您在源代码中看到 <ul>
,如您所见,它是动态的在 <input>
以下,因此您需要通过它的定位器处理该下拉列表,它是动态的,因此首先您需要在文本框中传递一些文本,然后您需要使用 [=] select 下拉列表中的元素13=] 在 selenium 中你使用 selectByVisibleText("")
或者你可以使用 List<Element>
你可以存储来自下拉列表的所有受人尊敬的来源(孟买,迈索尔等)并明智地使用它
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='gosuggest_inputSrc'"]))).sendKeys("M");
List<WebElement> myList = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("Xpath of the dynamic drop down")));
for (WebElement element:myList) {
if(element.getText().contains("Mumbai"));
element.click();
}
我给了你一个想法,如果你需要任何进一步的帮助,请告诉我
使用下面的代码就可以了
Webelement ele=driver.findelement()
Actions ob = new Actions(driver);
ob.moveToElement(ele);
ob.click(ele);
Action action = ob.build();
action.perform();
Chrome 浏览器
首先如何在 Chrome 浏览器中找到自动填充框的 XPATH 打开您的网站,然后单击检查元素并立即单击源选项卡,单击以打开自动填充框并按 **F8** **键暂停调试器**。然后单击您的元素选项卡,您可以轻松地获取 xpath 参考下面的快照以获取更多信息。所以它会冻结你的HTML。
现在单击“元素”并创建您自己的 xpath。
火狐浏览器
第二,如何在 Firefox 中找到自动填充框的 xpath - 打开您的 Firefox 并右键单击并单击您网站上的检查元素。有动画选项,因此它将打开所有 DOM 展开,如下图所示。因此,通过阅读此 dom 结构,您可以轻松创建 XPATH。
不是如何从自动填充框中查找元素。请参考下面的代码片段。
package com.software.testing;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Testingclass extends DriverFactory {
private static WebDriver driver = null;
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "your driver path");
driver = new ChromeDriver();
driver.get("https://www.goibibo.com/");
new WebDriverWait(driver, 20)
.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='gosuggest_inputSrc']")))
.sendKeys("A");
Thread.sleep(1000);
List<WebElement> myList = new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfAllElementsLocatedBy(
By.xpath("//div[@class='dib marginL10 pad0 textOverflow width90']/div/span")));
for (int i = 0; i < myList.size(); i++) {
System.out.println(myList.get(i).getText());
if (myList.get(i).getText().equals("Ahmedabad")) {
myList.get(i).click();
break;
}
}
}
}
Don't forgot to use break after your conditional statement else it
will thrown an exception.
我已经使用 python 通过 selenium 将其自动化。它将所有建议的城市收集在一个列表中,然后单击所需的城市。
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.goibibo.com/")
driver.implicitly_wait(3)
listCity = []
driver.find_element_by_xpath("//input[@id='gosuggest_inputSrc']").send_keys("JA")
cities = driver.find_elements_by_xpath("//div[@class='mainTxt clearfix']//preceding-sibling::span")
for city in cities:
listCity.append(city.text)
for city in cities:
if "Jagdalpur" in city.text:
city.click()
break
print(listCity)
print(len(listCity))
如何在 selenium 中处理此网站“https://www.goibibo.com/”的“发件人”和“目的地”框中的自动建议。 请帮忙
我厌倦了使用基本方法但无法获取自动建议下拉的 X 路径
无法点击下拉菜单
package basic;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class goibibo {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
WebDriver driver = new ChromeDriver();
driver.get("https://www.goibibo.com/");
new WebDriverWait(driver, 20)
.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='gosuggest_inputSrc']")))
.sendKeys("Mum");
List<WebElement> myList = new WebDriverWait(driver, 20).until(
ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//*[@id=\"react-autosuggest-1\"]")));
for (WebElement element : myList) {
if (element.getText().contains("Mumbai"))
;
element.click();
}
}
}
所以您可以尝试一种解决方案,请找到下面的屏幕截图,
如您在屏幕截图中所见,如果我在文本框中键入 M,则下拉列表会显示与字母 'M' 相关的记录,如果您在源代码中看到 <ul>
,如您所见,它是动态的在 <input>
以下,因此您需要通过它的定位器处理该下拉列表,它是动态的,因此首先您需要在文本框中传递一些文本,然后您需要使用 [=] select 下拉列表中的元素13=] 在 selenium 中你使用 selectByVisibleText("")
或者你可以使用 List<Element>
你可以存储来自下拉列表的所有受人尊敬的来源(孟买,迈索尔等)并明智地使用它
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='gosuggest_inputSrc'"]))).sendKeys("M");
List<WebElement> myList = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("Xpath of the dynamic drop down")));
for (WebElement element:myList) {
if(element.getText().contains("Mumbai"));
element.click();
}
我给了你一个想法,如果你需要任何进一步的帮助,请告诉我
使用下面的代码就可以了
Webelement ele=driver.findelement()
Actions ob = new Actions(driver);
ob.moveToElement(ele);
ob.click(ele);
Action action = ob.build();
action.perform();
Chrome 浏览器
首先如何在 Chrome 浏览器中找到自动填充框的 XPATH 打开您的网站,然后单击检查元素并立即单击源选项卡,单击以打开自动填充框并按 **F8** **键暂停调试器**。然后单击您的元素选项卡,您可以轻松地获取 xpath 参考下面的快照以获取更多信息。所以它会冻结你的HTML。现在单击“元素”并创建您自己的 xpath。
火狐浏览器
第二,如何在 Firefox 中找到自动填充框的 xpath - 打开您的 Firefox 并右键单击并单击您网站上的检查元素。有动画选项,因此它将打开所有 DOM 展开,如下图所示。因此,通过阅读此 dom 结构,您可以轻松创建 XPATH。不是如何从自动填充框中查找元素。请参考下面的代码片段。
package com.software.testing;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Testingclass extends DriverFactory {
private static WebDriver driver = null;
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "your driver path");
driver = new ChromeDriver();
driver.get("https://www.goibibo.com/");
new WebDriverWait(driver, 20)
.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='gosuggest_inputSrc']")))
.sendKeys("A");
Thread.sleep(1000);
List<WebElement> myList = new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfAllElementsLocatedBy(
By.xpath("//div[@class='dib marginL10 pad0 textOverflow width90']/div/span")));
for (int i = 0; i < myList.size(); i++) {
System.out.println(myList.get(i).getText());
if (myList.get(i).getText().equals("Ahmedabad")) {
myList.get(i).click();
break;
}
}
}
}
Don't forgot to use break after your conditional statement else it will thrown an exception.
我已经使用 python 通过 selenium 将其自动化。它将所有建议的城市收集在一个列表中,然后单击所需的城市。
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.goibibo.com/")
driver.implicitly_wait(3)
listCity = []
driver.find_element_by_xpath("//input[@id='gosuggest_inputSrc']").send_keys("JA")
cities = driver.find_elements_by_xpath("//div[@class='mainTxt clearfix']//preceding-sibling::span")
for city in cities:
listCity.append(city.text)
for city in cities:
if "Jagdalpur" in city.text:
city.click()
break
print(listCity)
print(len(listCity))