2015-10-13 10 views
-1

У меня есть код ниже, чтобы настроить ставку на аукционе. Я застрял, когда кнопка подтверждения отключена, пока пользователь не вводит нажатия клавиш в текстовое поле. Я могу заполнить поле, используя selenium.type, однако это не удаляет отключенный атрибут от кнопки.Как удалить атрибут элемента с помощью JavascriptExecutor и Selenium WD?

Я надеялся, что может быть способ удалить атрибут после завершения команды .type.

Я искал много страниц, чтобы найти ответ, и я обнаружил, что это возможно, но для жизни меня я не могу заставить его работать.

Может кто-нибудь, пожалуйста, помогите с тем, что я делаю неправильно здесь:

import static org.junit.Assert.*; 
import java.io.PrintWriter; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 
import org.openqa.selenium.By; 
import org.openqa.selenium.JavascriptExecutor; 
import org.openqa.selenium.WebElement; 
import com.thoughtworks.selenium.DefaultSelenium; 
import com.thoughtworks.selenium.Selenium; 
import static org.hamcrest.Matchers.containsString; 


public class Bidder_Home_004 { 
    private Selenium selenium; 

    @Before 
    public void setUp() throws Exception { 
     selenium = new DefaultSelenium("localhost", 4444, "*chrome", "URL"); 
     selenium.start(); 
    } 

    @Test 
    public void testBidder_Home_004() throws Exception { 

    //  Login 
     selenium.open("/bidderlogin"); 
     selenium.select("id=ContentPlaceHolder1_ddlBidder", "label=A H Biler"); 
     selenium.click("id=ContentPlaceHolder1_btnLogin"); 
     selenium.waitForPageToLoad("30000"); 
     selenium.click("id=hrefCurrent"); 
     selenium.waitForPageToLoad("30000"); 

     Thread.sleep(3000); 
    //  End Login   

    //  Navigate to Home page   
     selenium.click("//*[@id='hrefCurrent']"); 
     selenium.waitForPageToLoad("30000"); 
    //  End Navigate to Home page 

    //  Find Active Tab 
     String linkHome = selenium.getText("//li[@class='active']"); 

     assertEquals("Igangværende", linkHome); 
    //  End Find Active Tab 

    //  Get Auction ID 
     selenium.click("//*[@id='spanWait']"); 
     Thread.sleep(3000);   
     String linkAuctionlist = selenium.getValue("//*[starts-with(@id, 'liAuction')]/@id");   
     linkAuctionlist = linkAuctionlist.replace("liAuction", "");   
    //  End Get Auction ID 

     // Get Vehicle ID   
     String carsinAuction = selenium.getValue("//*[1][contains(@id,'btnBidUp')]/@id"); 
     carsinAuction = carsinAuction.replace("btnBidUp",""); 
     // End Get Vehicle ID 

    //Find Original Vehicle Value 
     String OrgVal1 = selenium.getText("//*[@id='bidvalue_"+carsinAuction+"']"); 
     OrgVal1 = OrgVal1.replace("kr. ", ""); 
     OrgVal1 = OrgVal1.replace(".", ""); 
     int OrgVal2 = Integer.parseInt(OrgVal1);    
     int nextBid = (OrgVal2 + 1500);   
    // End Find Original Vehicle Value 

    // Click AutoBid button   
     selenium.click("//*[@id='btnProxy"+carsinAuction+"']"); 
     Thread.sleep(2000); 
     selenium.type("//*[@id='txtProxyBid']", ""+nextBid+""); 

    ((JavascriptExecutor)selenium).executeScript("arguments[0].removeAttribute('disabled','disabled')"); 

     selenium.click("//*[@id='btnSubmit']"); 

     Thread.sleep(2000); 
    // End Click AutoBid button 

    // Find New Vehicle Value 
     String NewVal1 = selenium.getText("//*[@id='bidvalue_"+carsinAuction+"']"); 
     NewVal1 = NewVal1.replace("kr. ", ""); 
     NewVal1 = NewVal1.replace(".", ""); 
     int NewVal2 = Integer.parseInt(NewVal1); 

    // End Find New Vehicle Value 
     String fileName = new SimpleDateFormat("ddMMyyyy'Autobid.txt'").format(new Date()); 
       PrintWriter writer = new PrintWriter(fileName, "UTF-8"); 
       writer.println(NewVal2); 
       writer.close(); 

    } 

    @After 
    public void tearDown() throws Exception { 
     selenium.stop(); 
    } 

} 

Как вы можете увидеть в разделе «Нажмите кнопку AutoBid» У меня есть строка, которая включает в себя JavascriptExecutor - это линия, Я нашел на других форумах и в stackoverflow, но я еще не получил его на работу.

Когда я исполняю я имею следующие ошибки:

java.lang.ClassCastException: com.thoughtworks.selenium.DefaultSelenium не может быть приведен к org.openqa.selenium.JavascriptExecutor

Как решить эту ошибку?

+0

Вы смешиваете селен 1 & 2 (WebDriver) версию. Определите, какой из них вы хотите использовать (большинство людей предпочтут Webdriver). – xyz

+0

Извините за мой in = gnorance, но можете ли вы указать, где я их смешал? –

+0

Я новичок в автоматизации и думал, что все в порядке, весь код работает правильно, кроме удаляемой «отключенной» части –

ответ

0

Для Selenium WebDriver:
Пожалуйста, удалите следующие строки из кода в секции импорта:

import com.thoughtworks.selenium.DefaultSelenium; 
import com.thoughtworks.selenium.Selenium; 

это приводит к некоторым конфликтам

+0

Код не будет скомпилирован, если импорт будет удален. OP смешивает селен 1 и webdriver, поэтому ему нужно его исправить. – xyz

+0

Правильный код не компилируется без этих импортных операций, но все же не уверен, где я смешал версии, хотя –

0

Причина находится в вашем обертку класса DefaultSelenium.

для литья до JavascriptExecutor это должен быть отдельный экземпляр экземпляра selenium Driver.

И это должно выглядеть следующим образом:.

((JavascriptExecutor) DefaultSelenium.getDriverInstance()) executeScript()

Для решения литья до JavascriptExecutor вы должны вернуть explisit экземпляр драйвера (Firefox, Chrome, Opera, IE ...).

И этот метод должен имеет сигнатуру как следующее:

class DefaultSelenium { 
    // all class stuff here 
    public static RemoteWebDriver getDriverInstance() { 
     return currentDriverInstance; 
    } 

После вы будете иметь правильный экземпляр Selenium RemoteWebDriver вы в состоянии бросить его JavascriptExecutor и выполнить JS скрипт.

КСТАТИ:

Использование Thread.sleep() очень плохой стиль.

Намного лучше использовать явных ожиданий - Explicit and Implicit Waits