Tag: selenium webdriver

@CacheLookup如何在WebDriver中工作?

我不确定我是否理解缓存原则: @CacheLookup @FindBy(how = How.ID, using = namespace + signifLvl) private WebElement sigLvl; 如果我们使用这种Annotation方法,正在使用ElementLocator,并且第一次引用该字段时,元素被找到driver.findElement(by)并通过ElementLocator缓存,以便下次我们引用它时,它将从缓存。 它看起来取决于ElementLocator和PageObject实例的生命周期。 它也与direct driver.findElement(By); 调用。 我假设,WebElement就像是元素的指针/引用,对吧? 因此,如果元素在浏览器中发生更改,则会立即反映到WebElement。 就像在JavaScript中一样。 因为所有RemoteWebElement关于元素状态的方法都是对浏览器执行命令/请求。 这样即使在缓存元素中也会反映出这些变化,对吧?

Selenium sendKeys()针对Chrome,Firefox和Safari的不同行为

下面是简单的代码片段。 @FindBy(className = “element-to-press”) private WebElement elementToPress; // some other code Keys move = Keys.ARROW_DOWN; gridContainer.sendKeys(move); 在Firefox中一切正常。 在Chrome中我得到了”org.openqa.selenium.WebDriverException: unknown error: cannot focus element”错误 Safari对sendKeys()没有反应 我也试过用另一种方法: Keys move = Keys.ARROW_DOWN; Actions actions = new Actions(driver); actions.moveToElement(element).click(); // to focus on element actions.sendKeys(move).perform(); 此代码修复了Chrome “cannot focus element”错误,但浏览器仍未对Keys.ARROW_DOWN/Keys.ARROW_UP/Keys.ARROW_LEFT/Keys.ARROW_RIGHT事件作出反应 Safari和Firefox也不会对sendKeys()做出反应。 我无法理解发生了什么,以及如何让我的代码运行所有这些浏览器。 环境 : OS X 10.9.5 最新版本的Chrome / Safari […]

针对大量网站运行相同的测试

我需要针对70多个网站运行相同的测试,这些网站function相同,但皮肤不同。 但是,它们都通过不同的URL访问。 使用TestNG和Java,将URL传递给测试的有效方法是什么,以便我可以:a)针对每个站点运行每个测试并报告相同的b)并行执行测试以节省时间(未来需要) 我希望将URL存储为一种格式,以便它可以向最终用户公开并由它们配置。 理想情况下,这将在.csv中,或者在testng.xml文件中。 我在考虑@DataProvider或@Factory,但我不确定如何以有效和可维护的方式使用这些来从外部源获取参数,或者在我当前模型中哪些方法最适合放置? 我遇到的困难是我不想将数据必然传递到@Test,而是一次传递一个值(一个url)并针对所有@Test注释方法运行。 我目前的简单设置如下: testngxml: 我的验收测试: public class EndToEndTest extends DriverBase{ private HomePage home; private String url; @Factory(dataProvider = “urls”, dataProviderClass = URLProvider.class) public EndToEndTest(String url) { this.url = url; } @BeforeSuite public void stuff(){ newDriver(); } @BeforeClass public void setup(){ home = new HomePage(driver, url); } @Test (priority = 1) […]

Selenium 2:检测链接目的地的内容类型

我正在使用Selenium 2 Java API与网页进行交互。 我的问题是:我如何检测链接目的地的内容类型? 基本上,这是背景:在单击链接之前,我想确保响应是HTML文件。 如果没有,我需要以另一种方式处理它。 所以,假设有一个PDF文件的下载链接。 应用程序应直接读取该URL的内容,而不是在浏览器中打开它。 目标是让应用程序自动知道当前位置是HTML,PDF,XML还是其他任何使用适当的解析器来从文档中提取有用信息的应用程序。 更新 添加赏金:将奖励到最佳解决方案,这使我可以获得给定URL的内容类型。

webdriver无法单击firefox中的超链接

package testproject; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; public class WeblinkTest { public static void main(String[] args) throws InterruptedException { // Creating a fierfox driver/window WebDriver driver= new FirefoxDriver(); //Assigning address of the webpage which you want to check driver.get(“https://www.google.co.in/”); Thread.sleep(2000); //Creating and Identifing–By.xpath the element on which you want testing WebElement wb1= […]

java.lang.IllegalAccessError:尝试访问方法com.google.common.util.concurrent.SimpleTimeLimiter。 使用Selenium-Java 3.5.1或更高版本时

我想知道是否有人可以告诉我为什么当我使用Selenium-Java 3.5.1或更高版本时出现以下错误 – java.lang.IllegalAccessError: tried to access method com.google.common.util.concurrent.SimpleTimeLimiter.(Ljava/util/concurrent/ExecutorService;)V from class org.openqa.selenium.net.UrlChecker

维护并重用现有的webdriver浏览器实例 – java

基本上每次我从eclipse运行我的java代码时,webdriver都会启动一个新的ie浏览器并在大多数情况下成功执行我的测试。 但是,我有很多测试要运行,webdriver每次启动一个新的浏览器会话都很痛苦。 我需要一种方法来重用以前打开过的浏览器; 所以webdriver会打开,即第一次,然后第二次,我运行我的eclipse程序,我希望它只是拿起以前的浏览器实例并继续在同一个实例上运行我的测试。 这样,我每次运行程序时都不会启动新的浏览器会话。 假设你有100个测试要在eclipse中运行,你点击那个运行按钮然后它们全部运行,然后在大约第87次测试时你得到一个错误。 然后你回到eclipse,修复那个错误,但是你必须从头再次重新运行所有100个测试。 在第87次测试中修复错误,然后从第87次测试恢复执行,而不是从头开始重新执行所有测试,即从测试0一直到100,这将是很好的。希望,我很清楚得到你们的帮助,谢谢顺便说一下。 以下是我尝试维护和重用webdriver Internet Explorer浏览器实例的尝试: public class demo extends RemoteWebDriver { public static WebDriver driver; public Selenium selenium; public WebDriverWait wait; public String propertyFile; String getSessionId; public demo() { // constructor DesiredCapabilities ieCapabilities = DesiredCapabilities .internetExplorer(); ieCapabilities .setCapability( InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true); driver = new InternetExplorerDriver(ieCapabilities); this.saveSessionIdToSomeStorage(getSessionId); this.startSession(ieCapabilities); driver.manage().window().maximize(); } @Override […]

如何杀死在后台运行的IEDriver exe进程(Selenium webdriver)?

我正在使用selenium webdriver(用于Internet Explorer)。 它的作用基本上是在Internet Explorer中打开一个网页并进行表单提交。 我怎么能杀死在后台自动运行的internetexplorer.exe?

使用Selenium webdriver for Internet Explorer。 测试不会运行

我目前正在使用Selenium webdriver for IE(IEDriverServer.exe)扩展我的测试以覆盖Internet Explorer。 我的问题是,当我使用IE webdriver执行我的测试时。 当我运行测试时,Internet Explorer webdriver打开,我可以输入地址,但是当涉及到实际执行其余脚本时(例如,输入链接,按下各种按钮等),测试会因超时而崩溃。 注意:测试按照Chrome和Firefox上的预期执行。 编辑: try { driver.findElement(By.id(“topmenuImg”)).click(); } catch (NoSuchElementException ex) { JOptionPane.showMessageDialog(null, “Not possible”); }

Selenium Select – 选择部分文本的下拉选项

Selenium Select类有3种不同的选项选择方法: selectByIndex selectByValue selectByVisibleText 现在,我有一种情况,我希望通过某些文本选择一个选项,该文本部分出现在其中一个选项可见文本中(不想让自己暴露于整个文本中的更改)。 例如: VERY-LONG-TEXT-THAT-I-NEED-TO-SELECT-DOLLAR 我只想通过提供“DOLLAR”来选择此选项,例如: select.selectByPartOfVisibleText(“DOLLAR”) 你会如何有效地实施它?