HtmlUnitDriver获取移动版(selenium框架)

时间:2015-06-28 12:41:15

标签: java selenium mobile browser desktop

因为几天我尝试使用Selenium框架。我有这个框架的2个问题。

  • 在少数情况下,我有以下错误:“org.openqa.selenium.ElementNotVisibleException:您只能与可见元素进行交互”

但我的元素完全可见,我在这个页面上只有一个带有此名称的元素。当我更改浏览器版本时,可以避免此错误,但它太烦人了......

  • 在少数情况下,我得到了网站的移动版本,我找不到任何解决方案。我怎么能避免这个?

这是我在twitter上的代码示例:

    public static void main(String[] args) {

            HtmlUnitDriver htmlUnit = new HtmlUnitDriver(DesiredCapabilities.firefox());

            WebDriver driver = htmlUnit;

            goToTwitter(driver);

        }

public static void goToTwitter(WebDriver driver){

        driver.get("http://www.twitter.fr/login");

        // Find the text input element by its name
        WebElement element = driver.findElement(By.name("session[username_or_email]"));
        WebElement element2 = driver.findElement(By.name("session[password]"));

        // Enter something to search for
        element.sendKeys("****");
        element2.sendKeys("****");
        // Now submit the form. WebDriver will find the form for us from the element
        element.submit();

        // Check the title of the page
        System.out.println("Page title is: " + driver.getTitle());
        System.out.println("Page title is: " + driver.getCurrentUrl());
    }

GetCurrentUrl返回“mobile.twitter.com”,我需要这个网站的桌面版本。

所以我的问题是我们如何强制网站使用此框架返回桌面版本?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,激活了两个表单的javascript,在selenium中使用了methot setJavascriptEnabled(true);并在创建newWebClient时,直接在htmlunit中设置javascript

public HtmlUnitCustomizedWebDriver(BrowserVersion browser) {
    super(browser);
    this.setJavascriptEnabled(true);//this line

}
....
@Override
protected WebClient newWebClient(BrowserVersion version) {
    WebClient webClient = new WebClient(version);
    webClient.getCookieManager().setCookiesEnabled(true);
    webClient.getOptions().setTimeout(60000);
    webClient.getOptions().setCssEnabled(false);
    webClient.getOptions().setJavaScriptEnabled(true);//this line
    webClient.getOptions().setUseInsecureSSL(true);
    webClient.getOptions().setPopupBlockerEnabled(false);

    return webClient;
}