使用csselector从Yahoo搜索栏中选择数据失败

时间:2015-12-13 20:35:55

标签: java selenium selenium-webdriver css-selectors

package p111;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Yahoo_c {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        WebDriver wi = new FirefoxDriver();
        wi.get("https://in.yahoo.com/?p=us");
        wi.findElement(By.xpath("//[@id='UHSearchBox']")).sendKeys("pizza");
        try {
            Thread.sleep(50);
        } catch (Exception e) {
            System.out.println("wait ended");
        }
        String sl = wi.findElement(By.cssSelector("[id^='yui_3_12_0_1_14']")).getText();
        System.out.println(sl);
    }
}

以上是代码。 当我运行这个时,执行直到" pizza"正在进入雅虎搜索。在控制台执行终止时没有错误消息。 错误图片为enter image description here 请帮助解决此问题。尝试从列表中选择披萨送货。

4 个答案:

答案 0 :(得分:0)

您可以尝试使用Name而不是路径,因为yahoo搜索具有要使用的selenium的名称。请告知我是否必须使用Xpath,然后我将更改我的代码。

 public static void main(String [] arg){
        WebDriver wi = new FirefoxDriver();
        wi.get("https://in.yahoo.com/?p=us");


       WebElement yahooSearch= wi.findElement(By.name("p"));
        yahooSearch.sendKeys("pizza");

        try {
            Thread.sleep(50);
        } catch (Exception e) {
            System.out.println("wait ended");
        }
        String sl = wi.findElement(By.cssSelector("[id^='yui_3_12_0_1_14']")).getText();
        System.out.println(sl);


    }
}

或者您可以按ID使用相同的

public static void main(String [] arg){
        WebDriver wi = new FirefoxDriver();
        wi.get("https://in.yahoo.com/?p=us");


       WebElement yahooSearch= wi.findElement(By.id("UHSearchBox"));
        yahooSearch.sendKeys("pizza");

        try {
            Thread.sleep(50);
        } catch (Exception e) {
            System.out.println("wait ended");
        }
        String sl = wi.findElement(By.cssSelector("[id^='yui_3_12_0_1_14']")).getText();
        System.out.println(sl);


    }

答案 1 :(得分:0)

您尝试点击的选项是link锚标记中的<a> ..如果您在链接上具体,则可以使用By.linkText

driver.findElement(By.linkText("pizza delivery")).click();

答案 2 :(得分:0)

问题是你是sendKeys,即使输入了比萨饼但是下拉列表没有出现因为sendKeys不等同于通过键盘输入。解决方法很简单。您需要在写完&#34; pizza&#34;。

后执行键盘操作
// type pizza
wi.findElement(By.xpath("//[@id='UHSearchBox']")).sendKeys("pizza");

// now perform keyboard action (of pressing space key)
wi.findElement(By.xpath("String")).SendKeys(Keys.Space);

// now click on the pizza delivery link
wi.findElement(By.linkText("pizza delivery")).click();

在项目中尝试上面的代码,添加适当的等待并使用正确的元素定位器。

答案 3 :(得分:0)

试试这个xpath // * [包含(text(),&#39;披萨发送&#39;)] 它会起作用! :) 在firepath中检查这一点,并确保只有一个带定位器的节点。