2017-08-07 10 views
1

私のプログラムがindeed.caにログインするようにしたいのですが(これは正しいユーザーの資格情報を入力している限り動作します)、特定のジョブの投稿最初のオレンジの適用ボタン(作業中)をクリックすると、モーダルがポップアップします。Java - Selenium Firefox Driver - モーダルで特定のボタンをクリックできません

次に、表示されるモーダルの青色の適用ボタンをクリックします。これは動作していません。私はプログラムのこの部分で私の試みをコメントアウトしました。

ご協力いただければ幸いです。

import java.io.IOException; 
import org.openqa.selenium.By; 
import org.openqa.selenium.firefox.FirefoxDriver; 



public class Testing { 

public static void main(String[] args) throws IOException { 
    //enter location of gecko driver 
    System.setProperty("webdriver.gecko.driver", "C:\\Users\\Padoga\\Documents\\geckodriver-v0.18.0-win64\\geckodriver.exe"); 

    FirefoxDriver driver = new FirefoxDriver(); 

    //login works correctly (given that you use proper credentials) 
    driver.get("https://secure.indeed.com/account/login?service=my&hl=en_CA&co=CA"); 
    driver.findElement(By.xpath("//*[@id=\"signin_email\"]")).sendKeys("[email protected]"); 
    driver.findElement(By.xpath("//*[@id=\"signin_password\"]")).sendKeys("enterPassword"); 
    driver.findElement(By.xpath("//*[@id=\"loginform\"]/button")).click(); 

    //once logged in navigate to specific job 
    driver.navigate().to("https://ca.indeed.com/cmp/KGHM-International-Ltd./jobs/Financial-Analyst-7a08f1634e7d5c5c"); 

    //clicking on first apply button(orange button) works correctly 
    Thread.sleep(3000); 
    driver.findElement(By.xpath("//*[@id=\"apply-state-picker-container\"]/div[1]/span[1]")).click(); 

    //below not working, trying to click on apply button(blue apply button) in popup modal 
    //I've tried so many different xpaths and ids none seem to be triggering the apply button in modal 
    Thread.sleep(3000); 
    driver.switchTo().frame("indeedapply-modal-preload-iframe"); 
    driver.findElement(By.id("apply")).click(); 

} 
} 

ここにさまざまなhtml/javascriptがありますか?私が をクリックしようとしていた、つまり、By.id、By.xpath、またはBy.classNameとして使用されているものはありません。 ページソースを検査するとき、以下のコードは表示されません。ボタンボタンを適用オレンジをクリックした後にポップアップし、モーダルで、私は以下のコードを参照ください:

<div class="button_outter" id="apply-div"> 
    <div class="button_inner"> 
     <input class="button_content" id="apply" type="submit" name="apply" value="Apply"> 
    </div> 
</div> 
+0

暗黙の待機を追加して同じコードを試すことができますか? –

+0

私はしばらく前に、問題を修正しなかった、// WebDriverWait wait = new WebDriverWait(driver、20); // WebElement要素= wait.until(ExpectedConditions.presenceOfElementLocated(By.id( "apply")))); – Padoga

+0

おすすめのサンターですか? – Padoga

答えて

1

を私はインラインフレームにスイッチを使用して試してみましたが、これは、この場合には動作しません。最初の適用ボタンをクリックした後、以下のsendkeysの方法をチェックできますか?

Actions act = new Actions(driver); 
act.sendKeys(Keys.TAB, Keys.TAB, Keys.TAB, Keys.TAB, Keys.ENTER); 

または

driver.findElement(By.xpath("//body")).sendKeys(Keys.TAB, Keys.TAB,Keys.TAB, Keys.TAB, Keys.ENTER); 

更新:それはそう、第二の推薦が実際にこのような場合のために働きました。

これが役に立ちます。ありがとう。

+0

ありがとうSanthosh、あなたの最初の勧告は機能しませんが、あなたの2番目の勧告はうまくいきます。最後に余分な括弧を追加したので、2番目の解決策を編集しました。すべてのあなたの助けを感謝します。 Padoga – Padoga

1

あなたは次のように [適用]ボタンをBlueclick()メソッドを呼び出し、その後firtst iframeに切り替える必要があります。

driver.switchTo().frame(driver.findElement(By.xpath("//iframe[contains(@src,'https://apply.indeed.com/indeedapply/resumeapply')]"))); 
    //perfrom other actions 
    //finally click on Blue Apply button 
    driver.findElement(By.xpath("//input[@id='apply']")).click(); 
1

アイフレームのインデックス順が逆方向にあるようで、少なくともそれはそれが見えるものです私のように。私は、次のjavaコードを使用して "Blue Apply Button"をクリックすることができました:

driver.get("https://ca.indeed.com/cmp/KGHM-International-Ltd./jobs/Financial-Analyst-7a08f1634e7d5c5c"); 
wait = new WebDriverWait(driver, 10); 
//on my screen I had to scroll down to the orange apply button 
WebElement applyButton = wait.until(ExpectedConditions.presenceOfElementLocated(By.className("indeed-apply-button"))); 
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", applyButton); 
applyButton.click(); 
Thread.sleep(1000); 
driver.switchTo().frame(1); 
driver.switchTo().frame(0); 
driver.findElement(By.id("applicant.name")).sendKeys("My First Name is"); 
driver.findElement(By.id("apply-div")).click(); 
+0

smit9234ありがとうございます。このソリューションはすごく効果的です。フレームを切り替えて、新しいフレームで実際の要素を検索/選択するのに最適です。私はあなたがスクロールダウンする必要はないと思うfirefoxドライバ、またはJavascript Executorを使用していました。あなたのコードは誰かがHtmlUnitDriverを使用していると仮定していますか? – Padoga

+1

私はクロムでテストしていましたが、これは "要素が見つかりません"という例外をスローしていました。 JavaScriptのエグゼキュータを実装したら、うまくいきました。 htmlunitdriverを使って何が起きるか分かりません。 – smit9234

+0

Hey smit9234、あなたのコードはうまくいっていましたが、1週間前にIndeed.caが何かとあなたのコードを変更したと思います:driver.switchTo()。frame(1); driver.switchTo()。frame(0);もはや動作するようには見えません。 – Padoga

関連する問題