正在等待IE的“此页面无法显示”页面

时间:2015-06-22 20:52:41

标签: java internet-explorer selenium selenium-webdriver

我正在尝试使用Selenium创建显式等待,当无法访问页面时,等待Internet Explorer中“此页面无法显示”消息的可见性。当然,Selenium在xpaths中有撇号问题。我正在使用的代码如下......

String expectedText = "This page can't be displayed";
String waitforXpath = "//div[contains(.,'"+expectedText+"')]";
WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(waitforXpath)));

但是,当然,Selenium会抛出一个TimeoutException,等待“此页面无法显示”元素的可见性。关于如何最好地解决这个问题的任何建议?

编辑:以下是该页面的来源......

<!DOCTYPE HTML>
<html>

<head>
    <link rel="stylesheet" type="text/css" href="NewErrorPageTemplate.css" >

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>This page can't be displayed</title>

    <script src="errorPageStrings.js" language="javascript" type="text/javascript">
    </script>
    <script src="httpErrorPagesScripts.js" language="javascript" type="text/javascript">
    </script>
</head>

<body onLoad="javascript:getInfo();">
    <div id="contentContainer" class ="mainContent">
        <div id="mainTitle" class="title">This page can't be displayed</div>
        <div class="taskSection" id="taskSection">
            <ul id="cantDisplayTasks" class="tasks">
                <li id="task1-1">Make sure the web address <span id="webpage" class="webpageURL"></span>is correct.</li>
                <li id="task1-2">Look for the page with your search engine.</li>
                <li id="task1-3">Refresh the page in a few minutes.</li>
            </ul>
            <ul id="notConnectedTasks" class="tasks" style="display:none">
                <li id="task2-1">Check that all network cables are plugged in.</li>
                <li id="task2-2">Verify that airplane mode is turned off.</li>
                <li id="task2-3">Make sure your wireless switch is turned on.</li>
                <li id="task2-4">See if you can connect to mobile broadband.</li>
                <li id="task2-5">Restart your router.</li>
            </ul>
        </div>
        <div><button id="diagnose" class="diagnoseButton" onclick="javascript:diagnoseConnectionAndRefresh(); return false;">Fix connection problems</button></div>
    </div>
</body>

</html>

4 个答案:

答案 0 :(得分:0)

您可以通过检查文字来大大简化您的问题:

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.textToBePresentInElementLocated(By.id("mainTitle"), "This page can't be displayed"));

答案 1 :(得分:0)

尝试使用循环逻辑。代码将在等待2秒后获得页面标题,并再次重试5次。

boolean isTitleFound= false;
int tryCount = 0;
while (!isTitleFound || (tryCount++)<5)

    try{
        Thread.sleep(2000)
    } catch (Exception e) {
    }

    if (driver.getTitle().equalsIgnoreCase("This page can't be displayed") {
        isTitleFound = true;
    }
}

答案 2 :(得分:0)

每次将值传递给xpath查询时,都必须处理该值中的任何撇号。您尝试运行的实际xpath查询是;

//div[contains(.,'This page can't be displayed')]

你认为你能够逃避它,但是其他人和我在过去做这件事时遇到了问题。

http://www.seleniumtests.com/2010/08/xpath-and-single-quotes.html

使用concat为我和上面链接中的人工作。我希望以下xpath能够正常工作。

String expectedText = "concat('This page can','\"'\"','t be displayed')";
String waitforXpath = "//div[contains(.,'"+expectedText+"')]";

一般来说,我倾向于通过一种方法传递任何插入xpath的值,该方法会将其转换为xpath就绪的concat字符串。这是c#。

private string prepareForXpath(string text)
{
    if (!text.Contains("'"))
    {
        return "'" + text + "'";
    }
    StringBuilder finalString = new StringBuilder();
    finalString.Append("concat('");
    finalString.Append(text.Replace("'", "',\"'\",'"));
    finalString.Append("')");
    return finalString.ToString();        
}

这可能都非常混乱,这就是为什么xpath定位器可能会很痛苦的原因。我更喜欢SiKing建议的方法。方法不起作用的事实可能值得进一步研究。

答案 3 :(得分:0)

事实证明,Selenium实际上无法在IE&#34;上找到任何元素;此页面无法显示&#34;页面,但它可以在任何其他页面上。它还能够在Firefox和Chrome各自的“问题加载页面”中找到元素&#34;页面。但是,它可以在IE中获取页面的标题,该页面的标题等于我最初寻找的mainTitle WebElement的文本。所以我采用了以下解决方案......

expectedText = "This page can't be displayed";
WebDriverWait wait = new WebDriverWait(driverRp,10);
wait.until(ExpectedConditions.titleContains(expectedText));

我已经改变了我的问题的标题,以反映我遇到的问题的实际根源,因为潜在的问题与我期望和最初提出的问题不同。这个IE / Selenium交互中非常奇怪的行为。我不知道为什么它无法在&#34上找到WebElements;此页面无法显示&#34;页。评论是否有人知道!