通过 selenium 在 paytm 主页上发起搜索

Issue initiating search on paytm home page through selenium

以下是我想通过 Selenium 在 paytm 上自动化的步骤。

步骤:-

1.Launch 支付宝

2.Enter paytm 顶部显示的搜索框中的任意关键字 page.Eg。"Mobile"

3.Press 输入导航到搜索结果页面。

问题: 写在搜索框中的关键字被自动删除

我的代码:

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class XPath {

    public static void main(String[] args) {

        System.setProperty("webdriver.chrome.driver", "C:\ProgramFiles\Work\ChromeDriver\chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.get("https://paytm.com");
        //driver.findElement(By.xpath("//input[@placeholder='Search for a Product , Brand or Category']")).sendKeys("mobile");
        driver.findElement(By.xpath("//input[@placeholder='Search for a Product , Brand or Category']")).sendKeys(Keys.ENTER);
    }
}

问题是您需要等待页面完全加载。有一个 ajax 脚本是页面的 运行 加载,它在搜索输入文本框上做一些工作。当页面完全加载时,body 标签包含一个 style 属性。 Wait 通过使用 attributeCOntainsExpectedConditionsWebDriverWait 来实现此属性。

试试这个代码 -

new WebDriverWait(driver, 3).until(ExpectedConditions.attributeContains(By.tagName("body"), "style", "overflow: visible;"));
WebElement srch = driver.findElement(By.cssSelector("input[type='search']"));
srch.sendKeys("Hello");

@Grasshopper 的分析是正确的您需要等待页面完全加载。我用你自己的代码做了一个小测试,在调用 url:

后不久检索 Page Title
  • 代码块 :

    System.setProperty("webdriver.chrome.driver", "C:\path\to\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get("https://paytm.com");
    System.out.println(driver.getTitle());
    
  • 控制台输出 :

    Recharge - Online Mobile Recharge & Win 100% Cashback | Paytm.com
    
  • 具有此页面标题的初始页面是一个间歇页面,当有 JavaScriptAjax 呼叫 仍然有效。因此,在发送搜索 String 之前,您需要按如下方式诱导 WebDriverWait

  • 理想方法 :

    System.setProperty("webdriver.chrome.driver", "C:\path\to\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get("https://paytm.com");
    System.out.println(driver.getTitle());
    new WebDriverWait(driver, 20).until(ExpectedConditions.titleContains("Paytm.com – Digital & Utility Payment, Entertainment, Travel, Payment Gateway & more Online !"));
    System.out.println(driver.getTitle());
    driver.findElement(By.xpath("//input[@placeholder='Search for a Product , Brand or Category']")).sendKeys("mobile");
    driver.findElement(By.xpath("//input[@placeholder='Search for a Product , Brand or Category']")).sendKeys(Keys.ENTER);
    
  • 控制台输出 :

    Recharge - Online Mobile Recharge & Win 100% Cashback | Paytm.com
    Paytm.com – Digital & Utility Payment, Entertainment, Travel, Payment Gateway & more Online !
    
  • 浏览器快照 :