Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 3

0
votes
answers
60 views
+10

硒的Java依賴於Maven的設置,但硒要求提供驅動程序路徑

0

我已經設置在Maven的selenium-java依賴性:硒的Java依賴於Maven的設置,但硒要求提供驅動程序路徑

<dependency> 
    <groupId>org.seleniumhq.selenium</groupId> 
    <artifactId>selenium-java</artifactId> 
    <version>3.7.1</version> 
</dependency> 

但是當我運行一個簡單的測試 - 我得到一個異常的路徑驅動程序沒有設置:The path to the driver executable must be set by the webdriver.chrome.driver system property

足夠設置Maven的依賴是不是對硒? 我錯過了Selenium無法讀取Maven依賴關係?

沙发
0
1

設置Maven的依賴是不是足夠的硒?

不,你需要告訴它在哪裏可以找到網絡驅動器在此使用類似:

System.setProperty("webdriver.chrome.driver", complete_path_to_your_chrome_driver_executable_here); 

應該解決這個問題。

您可以在pom.xml中直接執行類似的配置,方法是在屬性部分中定義一個屬性,該屬性部分包含您的路徑,並使用maven-surefire-plugin的配置部分中的systemPropertyVariables。

例如:

建立在你的pom.xml的屬性部分

 
<webriver.path>path_to_your_driver_executable</webriver.path> 

然後在你的Maven的萬無一失,插件的配置部分中添加systemPropertyVariables部分

 
<systemPropertyVariables> 
    <webdriver.chrome.driver>${webriver.path}</webdriver.chrome.driver> 
    [...] 
</systemPropertyVariables> 
0
votes
answers
13 views
+10

如何在黃瓜中使用

0

如何使用「之前」創建驅動程序實例並在黃瓜功能文件中啓動Firefox。如何在黃瓜中使用

我很熟悉背景但從未使用過。

+2

這是一個非常廣泛的問題,除了提供有關Cucumber的@Before文檔的鏈接之外,我猜這些問題在當前表單中不可回答。你有沒有嘗試過可以發佈的代碼?你想用什麼語言,甚至? –

沙发
0
1

這個例子是從ToolsQA

採取讓我們做黃瓜鉤的一些簡單的小例子,是想了解這個概念。

Feature: Test Hooks 

Scenario: This scenario is to test hooks functionality 
    Given this is the first step 
    When this is the second step 
    Then this is the third step 

步驟定義

package stepDefinition; 

import cucumber.api.java.en.Given; 
import cucumber.api.java.en.Then; 
import cucumber.api.java.en.When; 

public class Hooks_Steps { 

    @Given("^this is the first step$") 
    public void This_Is_The_First_Step(){ 
     System.out.println("This is the first step"); 
    } 

    @When("^this is the second step$") 
    public void This_Is_The_Second_Step(){ 
     System.out.println("This is the second step"); 
    } 

    @Then("^this is the third step$") 
    public void This_Is_The_Third_Step(){ 
     System.out.println("This is the third step"); 
    } 

} 

**** ***注:沒有在步驟定義中使用的邏輯。只需打印步驟摘要記錄即可。*

現在掛鉤出現在圖片中,在您的情況下,您會想要在此初始化驅動程序。

魚鉤

package utilities; 
import cucumber.api.java.After; 
import cucumber.api.java.Before; 

public class Hooks { 

    @Before 
    public void beforeScenario(){ 
     System.out.println("This will run before the Scenario"); 
    } 

    @After 
    public void afterScenario(){ 
     System.out.println("This will run after the Scenario"); 
    } 
} 

確保包import語句應該是進口cucumber.api.java.After; & import cucumber.api.java.Before; 經常有人誤會並導入Junit Annotations,所以要小心這個。

輸出掛鉤 enter image description here

Aparts的,你可以利用其它有用的註釋黃瓜,請參考上ToolsQA.com here教程。

0
votes
answers
47 views
+10

Selenium 3.7 webdriver錯誤:超時等待驅動程序服務器啓動

1

最近升級到Selenium 3.7並出現錯誤。Selenium 3.7 webdriver錯誤:超時等待驅動程序服務器啓動

錯誤跟蹤日誌:

Debug 1 Debug 2 Starting ChromeDriver 2.33.506106 (8a06c39c4582fbfbab6966dbb1c38a9173bfb1a2) on port 2198 Only local connections are allowed. Exception in thread "main" org.openqa.selenium.WebDriverException: Timed out waiting for driver server to start. Build info: version: '3.7.1', revision: '8a0099a', time: '2017-11-06T21:07:36.161Z' System info: host: 'Maggies-MacBook-Pro-2.local', ip: '192.168.1.6', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.12.6', java.version: '1.8.0_121' Driver info: driver.version: ChromeDriver at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:192) at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:178) at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:79) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:600) at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:219) at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:142) at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:181) at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:168) at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:123) at AutomationFrameWork.FirstTestCase.main(FirstTestCase.java:13) Caused by: org.openqa.selenium.net.UrlChecker$TimeoutException: Timed out waiting for [ http://localhost:2198/status] to be available after 20005 ms at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:100) at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:187) ... 9 more Caused by: java.util.concurrent.TimeoutException at java.util.concurrent.FutureTask.get(FutureTask.java:205) at com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:147) at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:75) ... 10 more

代碼:

public static void main (String args[]){ 
    System.out.println("Debug 1"); 
    System.setProperty("webdriver.chrome.driver", "/Users/maggie/Documents/ToolsQA/Libs/chromedriver"); 
    System.out.println("Debug 2"); 
    WebDriver driver = new ChromeDriver(); 
    System.out.println("Debug 3"); 
    driver.get("http://www.google.com"); 
    driver.quit(); 
} 

包括圖書館: 硒服務器獨立-3.7.1.jar

系統環境:

Mac OS: '10.12.6'

java.version: '1.8.0_121'

selenium-server-standalone-3.7.1.jar

geckodriver - v0.19.1

ChromeDriver 2.33

Chrome Version 62.0.3202.89 (64-bit)

謝謝你的任何想法。

+0

在大多數情況下,您的特定**驅動程序版本**不適用於特定的**瀏覽器版本**。嘗試兩種版本,並閱讀開發者對支持的看法。對於不同的系統,如您的** Mac **,它也可能會變得更加複雜。例如,在我的** Raspberry Pi **上,我搜索了近2個小時的驅動程序 - 瀏覽器版本對。 – Zabuza

沙发
0
0

正如你所看到WebDriverException: Timed out waiting for driver server to start.嘗試以下提到的步驟:

  • 卸載谷歌瀏覽器通過Revo Uninstaller

  • 安裝Google Chrome的最新版本。

  • 在網站上執行一些步驟,以確保網站正常打開。

  • 如果需要誘導Explicit WaitWebDriverWait

+0

我試着用firefox和geckodriver,但仍然遇到「Connection refused」錯誤。我不認爲這是因爲瀏覽器問題。 – Maggie

+0

@Maggie你的ChromeDriver和Geckodriver版本是什麼,你可以用版本信息更新問題嗎? – DebanjanB

+0

更新了Chrome和Firefix驅動程序版本。 – Maggie

板凳
0
1

更改此

System.setProperty( 「webdriver.chrome.driver」, 「/用戶/瑪吉/文檔/ ToolsQA /利布斯/ chromedriver」到「/Users/maggie/Documents/ToolsQA/Libs/chromedriver.exe」並試試這個

地板
0
1

我在Mac OS上遇到了同樣的問題檢查你的/ etc/hosts文件並確保你有127.0.0.1綁定到localhost。我錯過了,添加它和voi拉!

0
votes
answers
26 views
+10

打開Chrome與硒

0
public static void main(String[] args) { 
    System.setProperty("webdriver.chrome.driver", "C:/Users/myPC/Desktop/chromedriver.exe"); 
    WebDriver driver = new ChromeDriver(); 
    driver.get("http://www.google.com"); 
} 

所以,我下載chromedriver.exe並嘗試使用下面的代碼打開瀏覽器,但我每次運行此代碼我收到以下錯誤:打開Chrome與硒

Error:java: package com.google.common.collect does not exist 

而且還每當我嘗試並從桌面運行chromedriver.exe,chrome不想打開。

在此先感謝

+0

嘗試將其添加到您的庫,並從中例如啓動(System.setProperty( 「webdriver.chrome.driver」, 「庫\ chromedriver.exe」)) – crammeur

+0

歡迎來到堆棧溢出!關於什麼/爲什麼/如何嘗試完成以及迄今爲止嘗試過的更多信息會對您有所幫助。有關於發佈問題的[一些提示](https://stackoverflow.com/help/how-to-ask)。您是否檢出了許多[來自其他人的帖子](https://www.google.ca/search?q=Error:java:+package+com.google.common.collect+does+not+exist)問題是什麼? – ashleedawg

+0

你也需要放置jar文件 – crammeur

沙发
0
-2
public static void main(String[] args) { 
    System.setProperty("webdriver.chrome.driver", "C:/Users/myPC/Desktop/chromedriver.exe"); 
    WebDriver driver = new ChromeDriver(); 
    driver.navigate().to("http://www.google.com"); 
} 
+2

這看起來只是問題代碼的副本,根本不是答案。 – tripleee

+1

'driver.navigate()。到(「http://www.google.com」);'。你能解釋一下爲什麼你應該在driver.get(「http://www.google.com」);'上使用這段代碼。代碼轉儲沒有太大的作用,實際上可能會導致混淆。 – Bugs

+1

請添加一些解釋,而不是「僅限代碼答案」。 –

0
votes
answers
41 views
+10

登錄失敗的消息不會在使用硒時出現在網站上

1

我想使用硒登錄到一個網站。如果我輸入錯誤的憑據並提交登錄表單(不含硒),最終站點會提供拒絕訪問的消息。但是當我使用硒做同樣的事情時,訪問被拒絕的消息不會出現。有什麼建議麼?登錄失敗的消息不會在使用硒時出現在網站上

網址:https://oa.lombardfinance.com.au/

ChromeOptions options = new ChromeOptions(); 
    options.addArguments("disable-infobars"); 
    WebDriver driver = new ChromeDriver(options); 
    JavascriptExecutor js = (JavascriptExecutor)driver; 
    driver.get("https://oa.lombardfinance.com.au/"); 
    driver.findElement(By.id("ctl00_ContentPlaceHolder1_txtClientNumber")).sendKeys("Subrat"); 
    driver.findElement(By.id("ctl00_ContentPlaceHolder1_txtPassword")).sendKeys("Subrat"); 
    driver.findElement(By.id("ctl00_ContentPlaceHolder1_txtCaptcha")).sendKeys("Subrat"); 
    //WebElement loginForm = driver.findElement(By.id("aspnetForm")); 
    //js.executeScript("arguments[0].submit();", loginForm); 

    WebElement login = driver.findElement(By.id("ctl00_ContentPlaceHolder1_btnLogin2")); 
    new Actions(driver).moveToElement(login).click().perform(); 
+0

您可以發佈您的硒測試代碼和相應網頁的HTML嗎? –

+0

我附上了代碼和網址。 –

+0

嗯。我明白你的意思,手動點擊時會出現「拒絕訪問」消息,但在Selenium點擊時不會顯示。我是_guessing_這與你點擊一個帶有文件類型的輸入相關,然後執行一些javascript,但是我無法通過在測試中執行該javascript來實現它。即'driver.executeScript('WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(「ctl00 $ ContentPlaceHolder1 $ btnLogin2」,「」,true,「lo」,「」,false,false))');'。對不起,我不能有更多的幫助,希望別人可以介入。 –

沙发
0
0

剛試過你在駕駛引發的微小差異使用相同的代碼:

System.setProperty("webdriver.chrome.driver", "path	ochromedriver.exe"); 
WebDriver driver = new ChromeDriver(); 

我排除該行: options.addArguments(」禁用-信息欄「); 和Selenium測試顯示Access也被拒絕。

板凳
0
0

嘗試使用下面的代碼:

System.setProperty("webdriver.chrome.driver", "\path\to\chromedriver.exe"); 
    ChromeOptions options = new ChromeOptions(); 
    options.addArguments("--test-type"); 
    options.addArguments("--disable-extensions"); 
    WebDriver driver = new ChromeDriver(options); 

的解決方案更方便的,因爲有時瀏覽器顯示開發者模式的問題。

0
votes
answers
32 views
+10

如何從jar運行測試用例

0

我創建了擴展TestCase的AppTest類。 如果我單獨運行這個測試類運行成功,但是當我嘗試調用通過主類,它給我的類上發現的錯誤如何從jar運行測試用例

import java.io.File; 
import java.io.FileOutputStream; 
import java.util.List; 
import java.util.Map; 
import java.util.Set; 
import java.util.TreeMap; 
import java.util.concurrent.TimeUnit; 

import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.xssf.usermodel.XSSFRow; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 
import org.junit.After; 
import org.junit.AfterClass; 
import org.junit.Before; 
import org.junit.BeforeClass; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.JUnit4; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.core.io.ClassPathResource; 
import org.springframework.stereotype.Service; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 

import junit.framework.TestCase; 

/** 
* Unit test for simple App. 
*/ 
@RunWith(SpringJUnit4ClassRunner.class) 
@Service 
@ContextConfiguration 
public class AppTest extends TestCase 
{ 
    // Create WebDriver instance 
    static WebDriver driver; 
    static int count = 2; 
    @Value("${configValue.url}") 
    private String url; 

    @Value("${configValue.makerList}") 
    private String makerList; 

    static Map < String, Object[] > testReport = new TreeMap < String, Object[] >(); 

    //Create blank workbook 
    static XSSFWorkbook workbook = new XSSFWorkbook(); 
    //Create a blank sheet 
    static XSSFSheet spreadsheet = workbook.createSheet(" Employee Info "); 
    //Create row object 
    static XSSFRow row; 

    public static String deleteApiStatus = ""; 

    @Before 
    public void setUp() throws Exception { 
     // Initialize the WebDriver instance using chrome and launch the web browser 
     System.setProperty("webdriver.chrome.driver", "./Chrome/chromedriver.exe"); 
     driver = new ChromeDriver(); 
     // Open the application 
     driver.navigate().to(url); 
     // Maximize the current window 
     driver.manage().window().maximize(); 
    } 
    @BeforeClass 
    public static void init() throws Exception { 
     testReport.put("0", new Object[] {"SINK MIXER" }); 
     testReport.put("1", new Object[] {"COMPANY NAME", "PHONE NO", "MOBILE NO", "FAX", "LOCATION" }); 
    } 


    @Test 
    public void checkCreatedUserValue() throws Exception { 

     List<WebElement> month_menu = driver.findElements(By.xpath(".//div[@class='company']")); 
      for (int i=0;i<1;i++) //month_menu.size() 
      { 
       WebElement element = month_menu.get(i); 
       String contents = element.getAttribute("innerHTML"); 
       String[] url = contents.split(" "); 
       contents = url[47]; 
       StringBuilder sb = new StringBuilder(contents); 
       sb.delete(0,36); 
       sb.deleteCharAt(sb.length()-1); 

       System.out.println(sb.toString()); 
       String[] newUal = sb.toString().split("/"); 
       String contactUrl = "https://"+newUal[0]+".fm.alibaba.com/"+newUal[1]; 
       WebDriver newDriver = new ChromeDriver(); 
       newDriver.navigate().to(contactUrl); 
       newDriver.manage().window().maximize(); 
       newDriver.findElement(By.className("contact-detail-mask")).click(); 
       newDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 
       List<WebElement> elems = newDriver.findElements(By.xpath(".//li[@class='sc-hd-prefix2-tab-trigger']")); 
       elems.get(0).click(); 

       WebElement iframe= newDriver.findElement(By.id("alibaba-login-box")); 
       newDriver.switchTo().frame(iframe); 
       WebElement elem = newDriver.findElement(By.id("fm-login-id")); 
       elem.clear(); 
       elem.sendKeys("[email protected]"); 
       elem = newDriver.findElement(By.id("fm-login-password")); 
       elem.sendKeys("Test123"); 
       newDriver.findElement(By.id("fm-login-submit")).click(); 
       newDriver.switchTo().defaultContent(); 
       Thread.sleep(5000); 
       newDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 
       String companyName = newDriver.findElement(By.className("company-name")).getText(); 
       String phone = newDriver.findElement(By.cssSelector("dd[data-role='phone']")).getAttribute("innerText"); 
       String mobile = newDriver.findElement(By.cssSelector("dd[data-role='mobile']")).getAttribute("innerText"); 
       String fax = newDriver.findElement(By.cssSelector("dd[data-role='fax']")).getAttribute("innerText"); 
       List<WebElement> location = newDriver.findElements(By.xpath("//*[@id="site_content"]/div[1]/div/div[2]/article/div/table/tbody/tr[2]/td[2]")); 
       count++; 
       String countNo = Integer.toString(count); 
       testReport.put(countNo, new Object[] {companyName, phone, mobile, fax, location.get(0).getText() }); 
       newDriver.quit(); 
      } 
    } 

    @After 
    public void tearDown() { 
     // Quit the launched web browser 
     driver.quit(); 
    } 


    @Configuration 
    @ComponentScan("user.login.creation.UserValidation") 
    static class someConfig { 

     // because @PropertySource doesnt work in annotation only land 
     @Bean 
     PropertyPlaceholderConfigurer propConfig() { 
      PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); 
      ppc.setLocation(new ClassPathResource("configValue.properties")); 
      return ppc; 
     } 
    } 

    @AfterClass 
    public static void createReport(){ 

     //Iterate over data and write to sheet 
      Set <String> keyid = testReport.keySet(); 
      int rowid = 0; 
      for (String key : keyid) 
      { 
      row = spreadsheet.createRow(rowid++); 
      Object [] objectArr = testReport.get(key); 
      int cellid = 0; 
      for (Object obj : objectArr) 
      { 
       Cell cell = row.createCell(cellid++); 
       cell.setCellValue((String)obj); 
      } 
      } 
      //Write the workbook in file system 
      FileOutputStream out; 
     try { 
      out = new FileOutputStream(new File("./ReportSheet.xlsx")); 
      workbook.write(out); 
      out.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
      System.out.println("
"); 
      System.out.println("----------------------------------------------------------------------------------------------------------------------"); 
      System.out.println("ReportSheet.xlsx created successfully."); 
      System.out.println("----------------------------------------------------------------------------------------------------------------------"); 
      System.out.println("
"); 

      System.out.println("----------------------------------------------------------------------------------------------------------------------"); 
      System.out.println("Maven build completed. You can find detailed test case report in automatedTestReport folder present in current project structure."); 
      System.out.println("----------------------------------------------------------------------------------------------------------------------"); 
      System.out.println("
"); 

      /*System.out.println("----------------------------------------------------------------------------------------------------------------------"); 
      System.out.println("You can also find the error screenshot occurred during the execution in screenshot folder of current project structure (if any).Test case report contain detailed discription about occurred error."); 
      System.out.println("-----------------------------------------------------------------------------------------------------------------------"); 
      System.out.println("
");*/ 

    } 
} 

該測試類,當我試圖使用的另一種主要方法AppTest調用類,它給我的錯誤是:拋出java.lang.ClassNotFoundException:user.login.creation.UserValidation.AppTest

public class App 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("setup!"); 
     AppTest app = new AppTest(); 
     app.run(); 
    } 
} 

錯誤

Exception in thread "main" java.lang.NoClassDefFoundError: user/login/creation/UserValidation/AppTest 
    at user.login.creation.UserValidation.App.main(App.java:12) 
Caused by: java.lang.ClassNotFoundException: user.login.creation.UserValidation.AppTest 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 1 more 

我想從主要方法運行測試用例,有什麼建議嗎?

+0

你如何包裝罐子?它在'src/main'文件夾中而不是測試? –

+0

@DarrenForsythe是它在主文件夾中,我的測試課程在測試文件夾中。 – Swagat

沙发
0
0

你可以試試下面的代碼:

public static void main(String[] args) throws Exception {      
     JUnitCore.main(
     "AppTest");    
} 

執行這個主類,一旦你可能會遇到錯誤,但與下面的步驟繼續創建罐子:

Right click on project. 
Go To Export. 
Select Jar or Runnable Jar as per your use click on next. 
Specify the main file name. 
Click on Finish. 

從命令提示符下執行命令運行你的jar文件:

java -jar path-to-jar-file-with-name.jar 

讓我知道萬一有任何顧慮。

0
votes
answers
64 views
+10

點擊按鈕後,通過網站上的信息更新Google表格電子表格

-1

我使用Betfair進行了大量下注,並在Google表格電子表格中追蹤這些信息。點擊按鈕後,通過網站上的信息更新Google表格電子表格

手動爲每個賭注放置信息需要很長時間。

我想知道當我點擊Betfair的「Place Bets」按鈕(參見圖片)時是否有從Betfair網站收集投注信息的方式,並且編寫腳本將此信息添加到我的Google表格電子表格中,即使用硒Webdriver。

我想我問的是,是否有一種方法來調用我自己的腳本在網頁上的特定事件。

任何幫助或指針將不勝感激!

Betfair

+1

您可以爲您的瀏覽器創建擴展程序,併爲其添加功能到Place Bets按鈕。同時解析來自網站的投注信息並將其發佈到您的Google表格。 –

+0

@MarkDavydov我認爲這就是我正在尋找的,有沒有其他的指針可以給我寫一個Chrome擴展說? –

沙发
0
1

第一步: 瞭解張貼的東西谷歌片, 您可以嘗試看此YouTube video

第二步: 瞭解谷歌Chrome瀏覽器擴展製作的基本知識,你不需要太多的基礎知識。 Try This

第三步: 解析網頁並找到下注價格和div的按鈕。

第四步: 使用該信息它JS腳本集成爲您的擴展

利潤。 祝你好運。

0
votes
answers
47 views
+10

如何在等待元素可見性時避免重複呼叫

0

我目前有一個使用WebdriverIO的測試腳本,點擊一個按鈕並等待彈出窗口顯示。測試的目的是確保元素在點擊後顯示,但由於它是異步的,我必須等到它顯示出來。如何在等待元素可見性時避免重複呼叫

但是,如果我等到元素顯示,我的斷言將總是通過,如果waitForVisible成功。如果它不成功,它總是會在waitForVisible命令上拋出一個異常,並且斷言永遠不會執行。

下面是代碼示例:

browser.click(btnElement) 
browser.waitForVisible(popupElement) 
expect(browser.isVisible(popupElement)).to.be.true 

是否有不同的方法來告訴指望聲明重試/等到元素可見這樣的說法是不是沒用?

+0

只是刪除斷言...正如你所說,這是多餘的。 – JeffC

+0

但是沒有斷言的測試有什麼好處? –

沙发
0
3

您似乎混淆了assertions的目的,或者濫用了它們,特別是在您的示例中。您應該只使用斷言,當你有確定性要驗證事情WebElementtextattribute元素等)包含了預期類型的值(您返回到您的assert,或expect聲明爲最終驗證=>輸出是所需的一個)。

斷言驗證靜態值,它們不輪詢DOM。這就是爲什麼你有像.waitForVisible(),waitForText(),或更重要的是.waitUntil()(它提供了更多的靈活性)的工具。

誠然,通過ChaiJS提供可能有一個令人困惑的詞彙的expect斷言式(expect可能被斷章取義的:它期待的WebElement的是可見的)。只需使用它們來驗證不同命令的輸出,而不是使用WebElements或其他動態/更改元素的狀態。


話雖這麼說,作爲一個最佳實踐,你應該始終包裹您的命令(例如:.click())爲.waitUntil()塊和保證WebElement爲你準備好即將在行動執行:

  • 是否呈現在DOM中由前端邏輯? (使用.isExisting()
  • 是不是可見在DOM中? (你*不能點擊在viewport中不可見的元素)
  • 是不是可點擊? (或者您想對其執行的其他操作...)

最後,一個習慣動作(在我們的例子.click())應該是這樣的:

browser.waitUntil(() => { 
    browser.isExisting(locator); 
}, timeout, "Oups! An error occured.
Reason: element ('" + locator + "') does not exist"); 
browser.waitUntil(() => { 
    browser.isVisible(locator); 
}, timeout, "Oups! An error occured.
Reason: element ('" + locator + "') is not visible"); 
browser.waitUntil(() => { 
    browser.click(locator); 
}, timeout, "Oups! An error occured.
Reason: element ('" + locator + "') could not be clicked"); 

你可以用整個事情變成custom-command並使用它瓦特/ E您想。告別片狀測試! :)

*硒是一種以用戶爲中心網絡的自動化工具,從而爲如果用戶將(用戶不能在元素不可見,用戶單擊所有操作都進行不能同時點擊多個元素,或通過輸入整個單詞或整個段落等來填寫input字段)

+0

如果我正確理解你,你說你應該只使用斷言/期望來驗證值?但我看到很多人使用斷言來檢查元素是否可見/可點擊。如果點擊此按鈕創建一個內容未知的彈出框(通過CMS?),那麼我無法知道該值,但我仍然可以驗證它是否顯示。是的,即使它是空的,它也會通過,但沒有其他辦法可以讓我知道彈出窗口中將提供哪些內容。如果我只能斷言已知的值,我該如何爲此寫一個測試? –

+0

你的回答沒有多大意義。你爲什麼需要斷言你肯定會通過的東西?這是斷言的重點,以確保它在沒有通過或錯誤時通過。我不知道* static * value是什麼意思......如果這個值永遠不會改變,那麼斷言它是沒有意義的。這就像有一個斷言,「pi」仍然等於「3.14.」......你永遠不會那樣做。總是將命令封裝在等待中並不是一個最佳實踐。請發佈說明這樣的鏈接。 – JeffC

+0

那倒票@JeffC **:)**這是一個d!$%移動的男人!態度非常非常令人失望。 – iamdanchiv

板凳
0
0

我不知道WebdriverIO,但我會認爲它有類似的東西到try-catch。把你的等待包裹在try-catch。如果成功,則爲Assert.pass()或等效。如果超時,將拋出異常,因此在您的catch中超時放置Assert.fail()或等效。


我從來沒有用過ChaiJS但我確實看看the documentation,發現一對夫婦的事情,你應該能夠使用。

assert.isOk(false, 'this will fail'); 

這是從文檔,應該是相當於什麼我熟悉,Assert.Fail()。人們會認爲,一個輕微的調整。下面將相當於Assert.Pass()

assert.isOk(true, 'this will pass?'); 

如果不出於某種原因,你可以使用下面的文檔。

assert.isNotOk(false, 'this will pass'); 
+0

這幾乎總結了我對你的答案的看法:** [這裏](https://imgur.com/a/Sc5wn)**。作爲一個專業技巧,先進的技巧,當你*出售一個想法,解決方案,概念*或*辯論某人*時,**從來沒有**開始說你對你將要制定的目標一無所知關於的聲明。看到這裏的悖論傑夫? – iamdanchiv

+0

@iamdanchiv我使用C#和Java Selenium。 WebdriverIO是Selenium的語言綁定,我不編程。這個概念仍然適用,不是嗎?這是一種擴展到其他語言的編程概念。 – JeffC

+0

@JeffC我們已經實現了try-catch,但不幸的是我們沒有看到ChaiJS使用通過/失敗函數。也許我在文檔中錯過了它。 –

0
votes
answers
42 views
+10

等待硒中的ui數據過濾器

-1

在應用程序中,很多字段都存在,並且所有字段都有過濾器(文本框)。所以一旦用戶在任何一個過濾器中輸入值,UI數據(UI表)將開始刷新。等待硒中的ui數據過濾器

我想等待數據在UI中加載,然後應用另一個過濾器。

有什麼辦法要等到數據被不使用的Thread.sleep

+0

見:我如何做X?(https://meta.stackoverflow.com/questions/253069/whats-the-appropriate-new-current-close-reason-for-how-do-i-do-x)對SO的期望是用戶提出問題不僅僅是研究回答他們自己的問題,研究,代碼嘗試和結果。這表明你已經花時間去嘗試幫助自己,它使我們避免重申明顯的答案,最重要的是它可以幫助你得到更具體和相關的答案!另請參見:[問] – JeffC

沙发
0
0

沒有您提供進一步的細節加載,所有我可以推薦現在是FluentWait。例如:

final WebDriver driver = ...  
new FluentWait<>(driver).withTimeout(30, SECONDS) 
    .pollingEvery(1, SECONDS) 
    .ignoring(NoSuchElementException.class) 
    .until(
     webDvr -> !webDvr.findElements(By.xpath("//tr")).isEmpty() 
    ); 
+0

感謝您的回覆....我有類似的情況在頁面中我們有很多過濾器,默認情況下所有數據都顯示.....現在我想申請過濾器一個接一個,然後再應用第二個(下一個)過濾器想要等待第一個(上一個)過濾器的數據過濾。另外,默認情況下「// tr」與一些數據一起存在。請幫我解決這個問題,因爲我對硒世界很陌生。 –

板凳
0
0

我能執行此使用下面的代碼 -

public boolean isElementDisplayed(WebElement element) { 
     try {    
       WebDriverWait wait = new WebDriverWait(driver, 5); 
       wait.until(ExpectedConditions.visibilityOf(element)); 
       return element.isDisplayed(); 
      } catch (Exception e) { 
       return false; 
      } 
} 


public void loadingTimer(){ 

    WebElement element = driver.findElement(By.xpath("//span[contains(text(),'Loading...')]")); 

    if (isElementDisplayed(element)) { 
    WebDriverWait wait = new WebDriverWait(driver , 5); 
    wait.until(ExpectedConditions.not(ExpectedConditions.visibilityOf(element))); 
    } 

} 
0
votes
answers
30 views
+10

查找圖像的網址

-1

我目前正在使用python網絡爬蟲收集在谷歌上搜索到的圖像。我用硒滾動搜索頁面,並用美麗的湯來記錄所有的元素。查找圖像的網址

對於某些圖片,我可以輕鬆找到沒有額外點擊的網址,如「http://www.XXXXX.jpg」。但是對於一些圖片,如果我不點擊它並檢查元素,那麼src部分就像「data:image/jpeg; base 64,/ ...」。通過單擊後檢查縮放的圖像,我將獲得所需的網址。但我不知道如何使用硒點擊圖片。

有沒有什麼辦法讓這類圖片的網址?

+0

參見:[我要如何做X ?](https://meta.stackoverflow.com/questions/253069/whats-the-appropriate-new-current-close-reason-for-how-do-i-do-x)對SO的期望是,用戶提出的問題不僅僅是研究來回答他們自己的問題,還會分享研究,代碼嘗試和結果。這表明你已經花時間去嘗試幫助自己,它使我們避免重申明顯的答案,最重要的是它可以幫助你得到更具體和相關的答案!另請參閱:[問] – JeffC

沙发
0
0

這可能意味着圖像編碼的HTML 的src部分內儲存的圖片,你只需要獲取文本的長行後

data:image/jpeg;base 64,/ 

,並對其進行解碼。

例如

import base64 
b64_data = "here_text" 
imgdata = base64.b64decode(b64_data) 
filename = 'some_image.jpg' # I assume you have a way of picking unique filenames 
with open(filename, 'wb') as f: 
    f.write(imgdata) 

它也可能意味着單擊縮略圖後運行JavaScript,然後點擊元素所有你需要做的就是

driver.find_element_by_css_selector(".classname").click() 
+0

現在它可能只是存儲爲Base 64字符串的縮略圖。當你點擊它時,可能會有javascript在背景中發生,它正在構建實時圖像上的鏈接。 – WombatPM

+0

在這種情況下,您可以使用Selenium點擊元素 – mduiker

+0

@mduiker謝謝各位!點擊方法確實有效。我如何構建一個while循環或for循環來連續點擊所有圖像?而且一旦我點擊了一張圖片,這張圖片的所有元素都會被記錄下來,對吧?我對網頁一無所知......抱歉。 – Yujian