我想刮掉由无限滚动实现的页面的所有数据.以下python代码有效.
for i in range(100):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5)
Run Code Online (Sandbox Code Playgroud)
这意味着每次向下滚动到底部时,我都需要等待5秒钟,这通常足以让页面完成加载新生成的内容.但是,这可能不是时间效率.页面可以在5秒内完成加载新内容.每次向下滚动时,如何检测页面是否已完成加载新内容?如果我能检测到这一点,一旦我知道页面加载完毕,我可以再次向下滚动以查看更多内容.这更节省时间.
任何人都可以让我如何让硒等到页面完全加载的时候?我想要一些通用的东西,我知道我可以配置WebDriverWait并调用类似'find'的东西让它等待,但我不会那么远.我只需要测试页面加载成功并转到下一页进行测试.
我在.net中找到了一些东西但是无法在java中使用它...
IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));
wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));
Run Code Online (Sandbox Code Playgroud)
有人想过吗?
我正在尝试使用Java和Selenium WebDriver自动化一些测试用例.我有以下场景:
关闭弹出窗口后,我需要点击同一页面中的"添加项目"按钮.但是当WebDriver试图找到"添加项目"按钮时,如果互联网速度太快,WebDriver可以找到并单击该元素.
但是如果互联网很慢,WebDriver会在页面刷新之前找到按钮,但只要WebDriver单击该按钮,页面就会刷新并StaleElementReferenceException发生.
StaleElementReferenceException
发生之前.如果Thread.sleep(3000);在单击"添加项目"按钮之前使用测试用例,则工作正常.这个问题还有其他解决方法吗?
我正在尝试获取当前打开页面的URL.我正在使用Selenium WebDriver和Java.
我通过以下方式访问当前网址:
WebDriver driver = new WebDriver();
String url = driver.getCurrentUrl();
Run Code Online (Sandbox Code Playgroud)
但是,URL似乎并未实际反映我当前的位置.
我目前的测试案例包括访问NYT网站,然后点击"技术"链接.但是,无论地址栏中显示的URL如何,url似乎始终如此http://www.nytimes.com/.
我如何实际访问地址栏中URL的值,以便我可以告诉我实际上在哪个页面上?
我正在编写一些Java Webdriver代码来自动化我的应用程序.如何正确检查页面是否已加载?该应用程序也有一些Ajax调用.
我已经声明了WebDriver的隐式等待.
我想要完成的是浏览页面,等待加载某些内容然后获取并保存屏幕截图.
我已经拥有的代码是
WebDriver driver = new FirefoxDriver();
driver.get("http://www.site.com");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
try {
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("/home/Desktop/image.png"));
} catch (Exception e) {
e.printStackTrace();
}
driver.close();
Run Code Online (Sandbox Code Playgroud)
我需要等待的原因,即使页面被加载是因为它将被加载但在网站上我想要在几秒钟后拍摄负载的内容.由于某种原因页面没有等待,是否有另一种方法可以让驱动程序/页面等待X秒?
我在C#开始了一个Selenium项目.尝试等待页面完成加载,然后才进行下一步操作.
我的代码看起来像这样:
loginPage.GoToLoginPage();
loginPage.LoginAs(TestCase.Username, TestCase.Password);
loginPage.SelectRole(TestCase.Orgunit);
loginPage.AcceptRole();
Run Code Online (Sandbox Code Playgroud)
在loginPage.SelectRole(TestCase.Orgunit)中:
RoleHierachyLabel = CommonsBasePage.Driver.FindElement(By.XPath("//span[contains(text(), " + role + ")]"));
RoleHierachyLabel.Click();
RoleLoginButton.Click();
Run Code Online (Sandbox Code Playgroud)
我搜索元素RoleHierachyLabel.我一直在尝试使用多种方式等待页面加载或搜索元素属性允许一些超时:
1. _browserInstance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
Run Code Online (Sandbox Code Playgroud)
2. public static bool WaitUntilElementIsPresent(RemoteWebDriver driver, By by, int timeout = 5)
{
for (var i = 0; i < timeout; i++)
{
if (driver.ElementExists(by)) return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
你会如何解决这个障碍?
c# pageload ui-automation selenium-firefoxdriver selenium-webdriver
我确信这已经在某个地方得到了回答,因为这是一个非常基本的问题 - 但是,对于我的生活,我不能在网上找到答案.我觉得自己像一个完全白痴,但我必须这样问,这里是:
我正在编写一个python代码,它将生成一个域上所有页面地址的列表.这是使用selenium 2完成的 - 当我尝试访问由selenium生成的所有链接的列表时,我的问题出现了.
这是我到目前为止所拥有的:
from selenium import webdriver
import time
HovedDomene = 'http://www.example.com'
Listlinker = []
Domenesider = []
Domenesider.append(HovedDomene)
driver = webdriver.Firefox()
for side in Domenesider:
driver.get(side)
time.sleep(10)
Listlinker = driver.find_elements_by_xpath("//a")
for link in Listlinker:
if link in Domenesider:
pass
elif str(HovedDomene) in str(link):
Domenesider.append(side)
print(Domenesider)
driver.close()
Run Code Online (Sandbox Code Playgroud)
该Listlinker变量不包含在网页上找到的链接-而不是列表中包含,(我猜在这里)称为WebElements硒的特定对象.我不能,但是,发现任何WebElement属性,这将使我的链接-因为事实上我无法找到WebElement的任何实例在python属性被访问(至少不会以这样的方式我可以重现)
我非常感谢你们能给我的任何帮助
真诚的新人
我正在测试一个带有iFrame的页面,其内容是由JavaScript动态生成的.我必须等待完全加载iFrame以确保所有元素都存在.我尝试了下面的代码,它没有用.
WebDriver frame = wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frmMain"));
Run Code Online (Sandbox Code Playgroud)
我还试图等待iFrame中的某些元素出现.它没有用,也没用.
任何帮助将不胜感激,谢谢!
wait(...)的所有变体都从以下代码中抛出以下异常.我究竟做错了什么?
java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at LoginPage.main(LoginPage.java:29)
try
{
driver.get("http://domain:port/coco/webapp/login/login.faces");
driver.findElement(By.id("clientCode")).sendKeys("coco");
driver.findElement(By.id("systemCode")).sendKeys("consumer");
driver.findElement(By.id("userId")).sendKeys("ffadmin");
driver.findElement(By.id("password")).sendKeys("password");
driver.findElement(By.className("af_commandButton")).click();
driver.wait();
Assert.assertTrue(driver.getPageSource().contains("Administration"));
}
catch (Exception e)
{
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)