当前位置: 首页 > 知识库问答 >
问题:

硒不会在提交后等到网站加载

解念
2023-03-14

我正在尝试从C#提交一个带有Selenium的登录表单。但是我不能让它在提交后等待新页面加载。唯一有效的是Thread.Sleep.我应该怎么做才能让它等待?

[TestFixture]
public class SeleniumTests
{
    private IWebDriver _driver;

    [SetUp]
    public void SetUpWebDriver()
    {
        _driver = new FirefoxDriver();

        // These doesn't work
        //_driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(10));
        //_driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
    }

    [Test]
    public void SubmitTest()
    {
        _driver.Url = "http://mypage.com";

        _driver.FindElement(By.Name("username")).SendKeys("myname");
        _driver.FindElement(By.Name("password")).SendKeys("myeasypassword");
        _driver.FindElement(By.TagName("form")).Submit();

        // It should wait here until new page is loaded but it doesn't

        // So far this is only way it has waited and then test passes
        //Thread.Sleep(5000);

        var body = _driver.FindElement(By.TagName("body"));
        StringAssert.StartsWith("Text in new page", body.Text);
    }
}

共有2个答案

龙繁
2023-03-14

答案几乎就在JeffC的答案里:

我发现最好的方法是等待第一个页面上的元素失效,然后等待新页面上的该元素。

我用这个答案解决了这个问题:https://stackoverflow.com/a/15142611/5819671

在从新页面读取body元素之前,我添加了以下代码,现在它可以工作了:

new WebDriverWait(_driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementExists((By.Id("idThatExistsInNewPage"))));
池麒
2023-03-14

我发现最好的方法是等待第一页上的元素过时,然后等待新页面上的元素。您可能遇到的问题是您正在等待身体元素...这将存在于每个页面上。如果您只想等待一个元素,则应找到一个对要导航到的页面唯一的元素。如果您仍然想使用 body 标签,可以执行此操作...

public void SubmitTest()
{
    _driver.Url = "http://mypage.com";

    _driver.FindElement(By.Name("username")).SendKeys("myname");
    _driver.FindElement(By.Name("password")).SendKeys("myeasypassword");
    IWebElement body = _driver.FindElement(By.TagName("body"));
    _driver.FindElement(By.TagName("form")).Submit();

    body = new WebDriverWait(_driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.TagName("body")))
    StringAssert.StartsWith("Text in new page", body.Text);
}
 类似资料:
  • 我已经使用create react app构建了一个静态react网站,并使用git和github在netlify中部署了它。事实证明,我现在必须在我的网站上做一个小小的改变。我应该怎么做才能使更改反映在已部署的站点上。我在github中提交了更改,但更改没有显示在实时部署的url中。

  • 我试图在JavaFX网络视图中加载一个本地主机网站,但它似乎不起作用。在加载网页之前,我正在应用程序中创建HttpServer,但它只显示一个空白屏幕。导航到http://localhost:8080/index.html在谷歌Chrome中,我猜这一定是网络视图加载的问题。加载其他非本地主机页面确实有效,但我无法找出本地主机页面出现问题的原因。 下面的代码首先使用本地html文件创建HttpSe

  • 我有一个自动化项目使用Selenium,它将调用ChromeWebDriver并运行testcase 但Chromedriver不能在聚合物框架构建的网站上显示元素, 我们可以通过检查F12查看元素。但chromedriver找不到元素。 这里是网站的urlhttps://shop.polymer-project.org/我们不能使用ChomeDriver来查找元素内部节点“影子根”。此处代码:

  • 我使用Python3和Selenium firefox提交一个表单,然后获取它们登陆的URL。我是这样做的 这在大多数情况下都有效,但有时页面加载时间超过5秒,我会得到旧的URL,因为新的URL还没有加载。 我应该怎么做?

  • 我在eclipse中使用SeleniumWebDriver和TestNG。问题是页面在某些数据的中途重新登录,并且重新加载的时间是灵活的,这就是为什么我不能应用显式等待时间。我想让webdriver等待,直到重新加载完成。 我正在尝试通过此代码执行此操作……但它不起作用。